Ім'я файлу: Лекція 1.pptx
Розширення: pptx
Розмір: 3254кб.
Дата: 26.05.2022
скачати

Лекція 1

Основи Python

Про курс:

Про курс:

Змістовий модуль 1. Основи мови Python

Тема 1. Основні поняття мови Python.

Тема 2. Логічні оператори.

Тема 3. Структури даних.

Тема 4. Винятки.

Змістовий модуль 2. Функції та модулі

Тема 5. Функції.

Тема 6. Модулі.

Тема 7. Бібліотека MATPLOTLIB.

Тема 8. Бібліотека NUMPY. Бібліотека SciPy.

Змістовий модуль 3. Об’єктно-орієнтоване програмування на мові Python.

Тема 9. Введення в ООП.

Тема 10. Класи.

Тема 11. Патерни проектування мови Python.

Тема 12. Системне програмування.

Змістовий модуль 4. Особливості програмування на мові Python

Тема 13. Програмування графічних інтерфейсів.

Тема 14. Робота за базами даних.

Тема 15. Веб-фреймворк Django.

Тема 16. Робота з мережевим обладнанням.


16 лекцій

16 лабораторних робіт

Екзамен!

Як все це буде оцінюватись?

4 КМР по 10 балів = 40 балів

16 Л.Р. по 3,125 бала = 50 балів

Курс Python на netacad = 10 балів

Звіти з лабораторних робіт і файли з кодом програм надвилаються:

Підгрупи Морозова Д.С. - виконані завдання надсилати на пошту morozovds@ukr.net

Підгрупи Пулека І.В. - виконані завдання надсилати на пошту pulekoigor@gmail.com 

 

В 1991р. Гвідо ван Россум представив версію 1.0 мови Python.

В той час в Python вже були присутні класи зі спадковістю, модулі, обробка вийнятків, функції, лямбда-вирази і основні типи даних.

Python 2.0 – 2000 р.

Python 3.0 – 2008 р.

Версії 2 і 3 не є зворотньо сумісними!

Особливості:

  • динамічна типізація,
  • автоматичне керування пам'яттю,
  • механізм обробки винятків,
  • підтримка багатопоточних обчислень,
  • високорівневі структури даних.
  • Підтримується розбиття програм на модулі, які, в свою чергу, можуть об'єднуватися в пакети.

    Повністю підтримуються об'єктно-орієнтоване і структурне програмування, а також функціональне і аспектно-орієнтоване.

    Мова використовує динамічну типізацію разом з підрахунком посилань і циклічний збирач сміття для менеджменту пам'яті.

Де ж використовується Python?

Веб розробка

Для веб-розробки Python використовують у вигляді фреймворкі: Pyramid, Pylons, TurboGears, Flask, CherryPy і - найпопулярніший - Django.

Існують і движки для створення сайтів на Python:

Abilian SBE;

Ella;

Saleor;

Wagtail;

Django-CMS.

Також на Python пишуть парсери для збору інформації в Інтернеті.

Десктопні програми

Хоч мова Python не компілюється, з її допомогою створюють деякі десктопні програми.

Шо було розроблено на Python:

GIMP - візуальний редактор на Linux;

Ubuntu Software Center - центр додатків в ОС Ubuntu (один з дистрибутивів Linux);

BitTorrent до 6 версії - менеджер торрент-закачувань (пізніше програму переписали на C ++, але мережі peer-to-peer все ще працюють на Python);

Blender - програма для створення 3D-графіки.

Ігри

Багато комп'ютерних ігор були повністю або частково написані на Python. Існує хибна думка, що ця мова не підходить для серйозних проектів, але насправді він використовувався в розробці таких хітів, як:
  • Battlefield 2;
  • World of Tanks;
  • Civilization IV;
  • EVE Online.
  • Незважаючи на можливість реалізації GUI і роботи з графікою, на Python в основному пишуть скрипти - наприклад, взаємодії персонажів, запуску сцен, а також обробки подій.

    Cтворення скриптів

    Python підходить для написання плагінів і скриптів до вже готових програмах. Наприклад, для реалізації ігрової логіки або створення додаткових модулів. Скрипти на Python вбудовують і в програми на інших мовах, щоб автоматизувати будь-які завдання.

Системне адміністрування

Системним адміністраторам Python потрібен для автоматизації завдань. Він простий, потужний і підтримує спеціальні пакети, які підвищують його ефективність. І, найголовніше, він за замовчуванням встановлений на всі сервери з ОС Linux. Завдяки лаконічності Python можна швидко прочитати код і знайти слабкі місця.

Наукові дослідження

В Python є кілька бібліотек, які широко використовуються для проведення досліджень і обчислень:

SciPy - бібліотека з науковими математичними інструментами;

NumPy - розширення, яке додає підтримку матриць і багатовимірних масивів, а також математичні функції для роботи з ними;

Matplotlib - бібліотека для роботи з 2D- і 3D-графікою.

Завдяки бібліотекам і простоті освоєння мови багато вчених вибирають Python - особливо він популярний у математиків і фізиків.

Data Science

Python - одна з найбільш використовуваних в Data Science мов. На ньому пишуть алгоритми програм з машинним навчанням і аналітичні програми. За допомогою нього обслуговують сховища даних і хмарні сервіси. Також він допомагає парсити дані з інтернету. Наприклад, в Google Python застосовують для індексації сайтів.

Бібліотеки і фреймворки Python пропонують чудове рішення для машинного навчання, комп'ютерного зору, NLP та науки про дані: Tensorflow, Theano, Pandas, Scikit-Learn, NumPy, Keras, Pytorch

Які компанії використовують Python ?

В основному Python використовується стартапами і компаніями, які розробляють великі проекти. Ось лише частина величезного списку:

Alphabet використовує мову для скраппінга в пошуковику Google і реалізації сервісу YouTube;

BitTorrent - для реалізації мереж peer-to-peer;

Агентство національної безпеки США - для шифрування і аналізу розвідданих;

ESRI - як інструмент налаштування геоінформаційних програм;

Maya - для створення мультиплікації;

Pixar, Industrial Light & Magic - для створення анімаційних фільмів;

Intel, Cisco, HP, Seagate, Qualcomm і IBM - для тестування;

JPMorgan Chase, UBS, Getco і Citadel - для прогнозування фінансового ринку;

NASA, Los Alamos, Fermilab, JPL - для наукових обчислень;

iRobot - для розробки комерційних роботизованих пристроїв;

IronPort - для реалізації поштового сервера.

Крім того, його використовують в Instagram, Positive Technologies, Houdini, Facebook, Yahoo, Red Hat, Dropbox, Pinterest, Quora

Середні зарплати Python-розробників в Україні згідно dou.ua


Скільки заробляють Python-розробники?

Середні зарплати Python-розробників в Україні згідно ncube.com

Середні зарплати Python-розробників в світі згідно daxx.com

Середні зарплати Python-розробників в світі в порівнянні з зарплатами розробників на інших мовах згідно daxx.com

python.org


jetbrains.com/pycharm

Типізація

Python відноситься до мов з неявною сильною динамічною типізацією.

Неявна типізація означає, що при оголошенні змінної вам не потрібно вказувати її тип, при явній - це робити необхідно. Як приклад мов з явною типизацією можна привести Java, C ++. Ось як буде виглядати оголошення цілочисельної змінної в Java і Python.
Java:

int a = 1;

Python:

a = 1

Мови програмування бувають з динамічною та статичною типізацією.

У першому випадку тип змінної визначається безпосередньо при виконанні програми, у другому - на етапі компіляції.

Python – це мова з динамічною типізацією. На відміну від С, C#, Java , я кі є статично типізовані. Тобто тип змінної визначається тільки в момент виконання.Тому часто для Python замість терміну «присвоювання» вживають «зв’язування з деяким іменем»

Сильна типізація не дозволяє проводити операції у виразах з даними різних типів, слабка - дозволяє.

У мовах з сильною типізацією ви не можете складати наприклад рядки і числа, потрібно все приводити до одного типу.

До першої групи можна віднести Python, Java, до другої - С і С ++.

Типи даних в Python

До основних вбудованих типів даних відносяться:

None (невизначене значення змінної)

Логічні змінні (Boolean Type)

Числа (Numeric Type)

int - ціле число

float - число з плаваючою точкою

complex - комплексне число

Списки (Sequence Type)

list - список

tuple - кортеж

range - діапазон

Рядки (Text Sequence Type)

str

Бінарні списки (Binary Sequence Types)

bytes - байти

bytearray - масиви байт

memoryview - спеціальні об'єкти для доступу до внутрішніх

даних об'єкта через protocol buffer

Множини (Set Types)

set - множина

frozenset – незмінна множина

Словники (Mapping Types)

dict - словник

Змінні

Для того, щоб оголосити і відразу ініціалізувати змінну необхідно написати її ім'я, потім поставити знак рівності і значення, з яким ця змінна буде створена.

Наприклад рядок:

b = 5

оголошує змінну b і привласнює їй значення 5.

Цілочисельне значення 5 в рамках мови Python по суті своїй є об'єктом.

Об'єкт, в даному випадку - це абстракція для представлення даних, дані - це числа, списки, рядки і т.п.

При ініціалізації змінної, на рівні інтерпретатора, відбувається наступне:

  • створюється цілочисельний об'єкт 5 (можна уявити, що в цей момент створюється комірка і 5 кладеться в цю комірку);
  • даний об'єкт має певний ідентифікатор, значення: 5, і тип: ціле число;
  • за допомогою оператора "=" створюється посилання між змінною b і цілочисельним об'єктом 5 (змінна b посилається на об'єкт 5).

Ім'я змінної не повинно збігатися з ключовими словами інтерпретатора Python


Список ключових слів можна отримати підключивши модуль keyword і скориставшись командою

Перевірити є чи ні ідентифікатор ключовим словом можна так:

>>> import keyword

>>> print("Python keywords: ", keyword.kwlist)

>>> keyword.iskeyword("try")

True

>>> keyword.iskeyword("b")

False

Для того, щоб подивитися на об'єкт з яким ідентифікатором посилається дана змінна, можна використати функцію id()


>>> a = 4

>>> b = 5

>>> id(a)

1829984576

>>> id(b)

1829984592

>>> a = b

>>> id(a)

1829984592

Ідентифікатор - це деяке цілочисельне значення, за допомогою якого унікально адресується об'єкт. Спочатку змінна a посилається на об'єкт 4 з ідентифікатором 1829984576, змінна b - на об'єкт з id = 1829984592. Після виконання операції присвоювання a = b, змінна a стала посилатися на той самий об'єкт, що і b.

Тип змінної можна визначити за допомогою функції type().


>>> a = 10

>>> b = "hello"

>>> c = (1, 2)

>>> type(a)

<class 'int'>

>>> type(b)

<class 'str'>

>>> type(c)

<class 'tuple'>

В Python існують змінні і незмінні типи

До незмінних (immutable) типів відносяться:

цілі числа (int),

числа з плаваючою точкою (float),

комплексні числа (complex),

логічні змінні (bool),

кортежі (tuple),

рядки (str)

і незмінні множинии (frozen set).

До змінних (mutable) типів відносяться:

списки (list),

множини (set),

словники (dict).

При створенні змінної, спочатку створюється об'єкт, який має унікальний ідентифікатор, тип і значення, після цього змінна може посилатися на створений об'єкт.

Незмінюваність типу даних означає, що створений об'єкт більше не змінюється.

Наприклад, якщо оголосити змінну k = 15, то буде створено об'єкт зі значенням 15, типу int і ідентифікатором, який можна дізнатися за допомогою функції id().


>>> k = 15

>>> id(k) 1672501744

>>> type(k)

<class 'int'>

Об'єкт з id = 1672501744 матиме значення 15 і змінити його вже не можна.

Якщо тип даних змінюваний, то можна змінювати значення об'єкта.

Наприклад, створимо список [1, 2], а потім замінимо другий елемент на 3.

>>> a = [1, 2]

>>> id(a)

47997336

>>> a[1] = 3

>>> a [1, 3]

>>> id(a) 47997336

Математичні операції

Python, в цій мові існує три вбудованих числових типу даних:

  • цілі числа (int);
  • дробові числа (float);
  • комплексні числа (complex).
  • Якщо в якості операндів деякого арифметичного виразу використовуються тільки цілі числа, то результат теж буде ціле число.

    Винятком є операція ділення, результатом якої є дійсне число. При спільному використанні цілочисельних і дробових змінних, результат буде дробовим.

Арифметичні операції з цілими і дробовими числами

Додавати можна як безпосередньо самі числа:

Так і змінні, що були попередньо ініціалізовані:

Результат операції додавання можна присвоїти іншій змінній:


>>> 3+2

5

>>> a = 3

>>> b = 2

>>> a + b

5

>>> a = 3

>>> b = 2

>>> c = a + b

>>> print(c)

5

Або присвоїти результат самій змінній. В цьому випадку можна використовувати повний або скорочений запис.

Повний:

Скорочений:


>>> a = 3

>>> b = 2

>>> a = a + b

>>> print(a)

5

>>> a = 3

>>> b = 2

>>> a += b

>>> print(a)

5

>>> 4 - 2

2

>>> a = 5

>>> b = 7

>>> a - b

-2

>>> 5 * 8

40

>>> a = 4

>>> a *= 10

>>> print(a) 40

>>> 9 / 3 3.0

>>> a = 7 >>> b = 4 >>> a / b 1.75

>>> 9 // 3

3

>>> a = 7

>>> b = 4

>>> a // b

1

>>> 9 % 5

4

>>> a = 7

>>> b = 4

>>> a % b

3

>>> 5 ** 4

625

>>> a = 4

>>> b = 3

>>> a ** b

64

Віднімання

Множення

Ділення

Ціла частина від ділення

Дробова частина від ділення

Піднесення до степеня

Робота з комплексними числами

Для створення комплексного числа можна використовувати функцію complex(a, b), в яку, як перший аргумент, передається дійсна частина, в якості другого - уявна. Або записати число у вигляді a + bj.

Створення комплексного числа:


>>> z = 1 + 2j

>>> print(z)

(1+2j)

>>> x = complex(3, 2)

>>> print(x)

(3+2j)

Комплексні числа можна додавати, віднімати, множити, ділити і підносити до степеня.

>>> x + z

(4+4j)

>>> x - z

(2+0j)

>>> x * z

(-1+8j)

>>> x / z

(1.4-0.8j)

>>> x ** z

(-1.1122722036363393-0.012635185355335208j)

>>> x ** 3

(-9+46j)

З комплексного числа можна витягти дійсну і уявну частини:

Для отримання комплексносопряженного числа необхідно використовувати метод conjugate()


>>> x = 3 + 2j

>>> x.real

3.0

>>> x.imag

2.0

>>> x.conjugate()

(3-2j)

Бітові операції

Бітові операції

В Python доступні бітові операції, їх можна виробляти над цілими числами.

Побітове І (AND):


>>> p = 9

>>> q = 3

>>> p & q

1

Побітове або (OR):

>>> p | q

11

>>> p ^ q

10

Побітове ні-або (XOR):

>>> p

-10

Інверсія

>>> p << 1

18

>>> p >> 1

4

Зсув вправо і вліво

У своєму повсякденному житті ми використовуємо десяткову систему числення, але при програмуванні, дуже часто, доводиться працювати з шістнадцятковою, двійковою і вісімковою.

Представлення числа в шістнадцятковій системі числення

Представлення числа у вісімковій системі числення

Представлення числа у двійковій системі числення


>>> m = 124504

>>> hex(m)

'0x1e658'

>>> oct(m)

'0o363130'

>>> bin(m)

'0b11110011001011000'

У стандартну поставку Python входить бібліотека math, в якій міститься велика кількість часто використовуваних математичних функцій. Для роботи з даним модулем його попередньо потрібно імпортувати.

Найбільш часто використовувані функції:

math.ceil(x) - повертає найближче ціле число більше, ніж x.

math.fabs(x) - повертає абсолютне значення числа.

math.factorial(x) -обчислює факторіал x.


>>> import math

>>> math.ceil(3.2)

4

>>> math.fabs(-7)

7.0

>>> math.factorial(5)

120

math.exp(x) - обчислює e в степені x.

math.log2(x) - логарифм за основою 2.

math.log10(x) - логарифм за основою 10.

math.log(x [, base]) - за замовчуванням обчислює логарифм за основою e, додатково можна вказати основу логарифма.


>>> math.floor(3.2)

3

>>> math.exp(3)

20.08553692318766

>>> math.log2(8)

3.0

>>> math.log10(1000)

3.0

>>> math.log(5)

1.6094379124341003

>>> math.log(4, 8)

0.6666666666666667

math.sqrt(x) - корінь квадратний від x.

Інші тригонометричні функції:

math.cos(x)

math.sin(x)

math.tan(x)

math.acos(x)

math.asin(x)

math.atan(x)

І наостанок пару констант:

math.pi - число Пі.

math.e - число е.

Крім перерахованих, модуль math містить ще багато різних функцій, за більш детальною інформацією можете звернутися на офіційний сайт


>>> math.pow(3, 4)

81.0

>>> math.sqrt(25)

5.0

Коментарі

Коментарі

Однорядкові коментарі.

Такий коментар починається з хеш-символу (#) і супроводжується текстом, який містить додаткові пояснення.

Також можна написати коментар поруч з оператором коду


# defining the post code postCode = 75000

# define the general structure of the product with default values product = { "productId": 0, # product reference id, default: 0 "description": "", # item description, default: empty "categoryId": 0, # item category, default: 0 "price": 0.00 # price, default: 0.00 }

Багаторядкові коментарі

Багаторядкові коментарі

Ці коментарі служать вбудованої документацією для інших людей, які читають ваш код, і зазвичай пояснюють речі більш детально.

Технічно Python не має явної підтримки багаторядкових коментарів, тому деякі варіанти вважаються обхідним рішенням, але все ж працюють для багаторядкових коментарів.

Версія 1 об'єднує однорядкові коментарі:


# LinuxThingy version 1.6.5 # # Parameters: # # -t (--text): show the text interface # -h (--help): display this help

""" LinuxThingy version 1.6.5 Parameters: -t (--text): show the text interface -h (--help): display this help """

Версія 2 простіше, ніж версія 1. Спочатку вона призначалася для створення документації, але її також можна використовувати для багаторядкових коментарів.

Зазвичай.

Зазвичай.

Досить часто Python-файл починається з декількох рядків коментарів. У цих рядках вказується інформація про проект, призначення файлу, програміста, який його розробив або працював над ним, і ліцензії на програмне забезпечення, яке використовується для коду. Наприклад, коментар починається з опису, за ним йде повідомлення про авторські права з ім'ям розробника і рік публікації коду. Нижче зазначено, що код ліцензований під GNU Public License (GPL). Ще нижче зазначається адреса електронної пошти автора.
# ----------------------------------------------------------- # demonstrates how to write ms excel files using python-openpyxl # # (C) 2015 Frank Hofmann, Berlin, Germany # Released under GNU Public License (GPL) # email frank.hofmann@efho.de # -----------------------------------------------------------

Коментарі документації

Коментарі документації

Python має вбудовану концепцію під назвою «рядки документації» (Docstring), яка є відмінним способом зв'язати написану вами документацію з модулями, функціями, класами і методами Python. Рядок документа додається в якості коментаря прямо під заголовком функції, модуля або об'єкта і описує дії функції, модуля або об'єкта.

Правила наступні:

  • Рядок документа - це або однорядковий, або багаторядковий коментар. В останньому випадку перший рядок є коротким описом, а після першого рядка йдепорожній рядок.
  • Почніть рядок документа з великої літери і завершите її точкою.
  • Наприклад:

    В інтерактивній довідці Python рядок документації стає доступною через атрибут __doc__


def add(value1, value2): """Calculate the sum of value1 and value2.""" return value1 + value2

Порядок обчисленнь

Порядок обчисленнь

Для обчислення виразів Python користується правилами пріорітетності операторів.

Наступна таблиця показує пріоритет операторів в Python, починаючи з найнижчого і до найвищого.

Це означає, що в будь-якому виразі Python спочатку обчислює оператори і вирази, розташовані знизу таблиці, а потім оператори вище по таблиці. Таблиця взята з Довідника по мові Python.

На практиці краще використовувати дужки для груповання операторів і операндів, щоб в явному вигляді вказати порядок обчислення виразів. Це в рази полегшить читання програми


а = 5 + 4 * 3 # Спочатку виконуєтсья множення # Далі - додавання # Результат: 17

b = (5 + 4) * 3 # Круглі дужки () скасовують пріоритет арифметичних операторів # Результат: 27

lambda

Лямбда-выраз

or

Логічне “Або”

and

Логічне “І”

not x

Логічне “НІ”

in, not in

Перевірка приналежності

is, is not

Перевірка тотожності

<, <=, >, >=, !=, ==

Порівняння

|

Побітове “АБО”

^

Побітове “АБО-НІ”

&

Побітове “І”

<<, >>

Зсуви

+, -

Додавання і віднімання

*, /, //, %

Множення, ділення, цілочисельне ділення і залишок від ділення

+x, -x

Додатнє, від’ємне

x

Побітове “НІ”

**

Піднесення до степеня

x.attribute

Посилання на атрибут

x[індекс]

Звертання за індексом

x[індекс1:індекс2]

Зріз

f(аргументи ...)

Виклик функції

(вирази, ...)

Зв’язка або кортеж

[вирази, ...]

Список

{ключ:дані, ...}

Словник

У цій таблиці оператори з рівним пріоритетом розташовані в одному рядку. Наприклад, + і - мають рівний пріоритет.

При наявності двох або більше операторів з однаковим рівнем в справу вступає асоціативність, яка визначає порядок.

Асоціативність - це порядок, в якому Python виконує вирази, що включають кілька операторів одного рівня пріоритетності.

Велика частина з них (за винятком оператора піднесення до степеня **) підтримують асоціативність зліва направо.

print(4 ** 3 ** 2) # Результат: 262144 print((4 ** 3) ** 2) # Результат: 4096

В Python є такі оператори (наприклад, привласнення і порівняння), які не підтримують асоціативність.

Для них застосовуються спеціальні правила порядку, в яких асоціативність не приймає участі.

Наприклад, вираз 5 < 7 < 9 - це не те ж саме, що і (5 < 7) < 9 або 5 < (7 < 9).

Зате 5 < 7 < 9 - те ж саме, що 5 < 7 і 7 < 9. Виконується зліва направо.

Так само працює зв'язування операторів присвоювання (наприклад, a = b = c), а

a = b + = c - поверне помилку.

PEP (Python Enhancement Proposal)

Ключова ідея PEP-8 така: код читається набагато більше разів, ніж пишеться. Власне, рекомендації про стиль написання коду спрямовані на те, щоб поліпшити читаність коду і зробити його узгодженим між великим числом проектів. В ідеалі, весь код буде написаний в єдиному стилі, і будь-хто зможе легко його прочитати.

Зовнішній вигляд коду

Відступи

Використовуйте 4 пробіли на кожен рівень відступу. Довгі рядки повинні вирівнювати загорнуті елементи або вертикально, використовуючи неявну лінію в дужках (круглих, квадратних або фігурних), або з використанням висячого відступу. При використанні висячого відступу слід застосовувати такі міркування: на першій лінії не повинно бути аргументів, а інші рядки повинні чітко сприйматися як продовження лінії

Правильно:

Правильно:

Неправильно:


# Вирівнювання по першій відкритій дужці foo = long_function_name(var_one, var_two, var_three, var_four) # Більше відступів включено для відрізнення його від інших def long_function_name( var_one, var_two, var_three, var_four): print(var_one)

# Аргументи на першій лінії заборонені, якщо не використовується вертикальне вирівнювання foo = long_function_name(var_one, var_two, var_three, var_four) # Більше відступів включено для відрізнення його від інших def long_function_name( var_one, var_two, var_three, var_four): print(var_one)

або бути під першим символом рядка, що починає багаторядкову конструкцію:


my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )

my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )

Табуляція або пробіли?

Табуляція або пробіли?

Пробіли - найкращий метод відступів. Табуляція повинна використовуватися тільки для підтримки коду, написаного з відступами за допомогою табуляції.

Python 3 забороняє змішування табуляції і пробілів у відступах.

Максимальна довжина рядка

Обмежте довжину рядка максимум 79 символами. Для більш довгих блоків тексту з меншими структурними обмеженнями (рядки документації або коментарі), довжину рядка слід обмежити 72 символами.

Найкращий спосіб перенесення довгих рядків є використання на продовжень рядків Python всередині круглих, квадратних і фігурних дужок. Довгі рядки можуть бути розбиті на декілька рядків, загорнуті в дужки.

Порожні рядки

Відокремлюйте функції верхнього рівня і визначення класів двома порожніми рядками.

Визначення методів всередині класу відділяються одним порожнім рядком. Додаткові порожні рядки можливо використовувати для розділення різних груп схожих функцій.

Використовуйте порожні рядки в функціях, щоб вказати логічні розділи.

Імпорт

Імпорт

Кожен імпорт, як правило, повинен бути на окремому рядку.

Правильно:

неправильно:

У той же час, можна писати так:

Імпорт завжди розміщуються на початку файлу, відразу після коментарів до модуля і рядків документації, і перед оголошенням констант.

Імпорти повинні бути згруповані в наступному порядку:

  • Імпорти зі стандартної бібліотеки
  • Імпорти сторонніх бібліотек
  • Імпорти модулів поточного проекту
  • Вставляйте порожній рядок між кожною групою імпортів.


import os import sys

import os, sys

from subprocess import Popen, PIPE

Уникайте використання пробілів в наступних ситуаціях:

  • Безпосередньо всередині круглих, квадратних або фігурних дужок.
  • Правильно:

    Неправильно:

  • Безпосередньо перед комою, крапкою з комою або двокрапкою:
  • Правильно:

    Неправильно:

  • Відразу перед відкриваючою дужкою, після якої починається список аргументів при виклику функції: Правильно:
  • Неправильно:


spam(ham[1], {eggs: 2})

spam( ham[ 1 ], { eggs: 2 } )

if x == 4: print(x, y); x, y = y, x

if x == 4 : print(x , y) ; x , y = y , x

spam(1)

spam (1)
  • Відразу перед відкриваючою дужкою, після якої йде індекс або зріз:
  • Правильно:

    Неправильно:

  • Використання більше пробілів навколо оператора присвоювання (або будь-якого іншого) для того, щоб вирівняти його з іншим:
  • Правильно:

    Неправильно:


dict['key'] = list[index]

dict ['key'] = list [index]

x = 1 y = 2 long_variable = 3

x = 1 y = 2 long_variable = 3

Інші рекомендації

Інші рекомендації

Завжди оточуйте ці бінарні оператори одним пробілом з кожного боку:

  • присвоювання (=, + =, - = і інші),
  • порівняння (==, <,>,! =, <>, <=,> =, In, not in, is, is not),
  • логічні (and, or, not).
  • Якщо використовуються оператори з різними пріоритетами, спробуйте додати пробіли навколо операторів з найнижчим пріоритетом. Використовуйте свої власні судження, однак, ніколи не використовуйте більше пробілів, і завжди використовуйте однакову кількість пробілів по обидва боки бінарного оператора.

i = i + 1 submitted += 1 x = x*2 - 1 hypot2 = x*x + y*y c = (a+b) * (a-b)

Неправильно:

i=i+1 submitted +=1 x = x * 2 - 1 hypot2 = x * x + y * y c = (a + b) * (a - b)

Правильно

Правильно:

Неправильно

Не використовуйте складені інструкції (кілька команд в одному рядку).

Правильно:

Неправильно:


def complex(real, imag=0.0): return magic(r=real, i=imag)

def complex(real, imag = 0.0): return magic(r = real, i = imag)

if foo == 'blah': do_blah_thing() do_one() do_two() do_three()

if foo == 'blah': do_blah_thing() do_one(); do_two(); do_three()

Точно неправильно:

Ймовірно, неправильно:


if foo == 'blah': do_blah_thing() for x in lst: total += x while t < 10: t = delay()

if foo == 'blah': do_blah_thing() else: do_non_blah_thing() try: something() finally: cleanup() do_one(); do_two(); do_three(long, argument, list, like, this) if foo == 'blah': one(); two(); three()

Угоди по іменуванню

Угоди по іменуванню

Угоди по іменуванні змінних в python трохи туманні, тому їх список ніколи не буде повним - проте, нижче наводиться список рекомендацій, що діють на даний момент.

Стилі імен

Існує доволі багато різних стилів. Зазвичай розрізняють наступні :

  • b (одиночна маленька буква)
  • B (одиночна велика буква)
  • lowercase (слово в нижньому регістрі)
  • lower_case_with_underscores (слова з маленьких букв з підкресленнями)
  • UPPERCASE (великі літери)
  • UPPERCASE_WITH_UNDERSCORES (слова з великої літери з підкресленнями)
  • CapitalizedWords (слова з великими літерами, або CapWords, або CamelCase). Зауваження: коли ви використовуєте абревіатури в такому стилі, пишіть все літери абревіатури великими - HTTPServerError краще, ніж HttpServerError.
  • mixedCase (відрізняється від CapitalizedWords тим, що перше слово починається з маленької літери)
  • Capitalized_Words_With_Underscores (слова з великими літерами і підкресленнями - потворно!)
Ніколи не використовуйте символи l (маленька латинська буква «ель»), O (велика латинська буква «о») або I (велика латинська буква «ай») як однобуквені ідентифікатори. У деяких шрифтах ці символи не відрізняються від цифри один і нуля. Якщо дуже потрібно l, пишіть замість неї заголовну L.

Імена модулів і пакетів

Модулі повинні мати короткі імена, що складаються з маленьких букв. Можна використовувати символи підкреслення, якщо це покращує читабельність. Те ж саме відноситься і до імен пакетів, проте в іменах пакетів не рекомендується використовувати символ підкреслення.

Імена класів

Імена класів повинні зазвичай дотримуватися угоди CapWords. Замість цього також можуть використовуватися угоди для іменування функцій, якщо інтерфейс документований і використовується в основному як функції.

Імена винятків

Так як виключення є класами, до винятками застосовується стиль іменування класів. Однак ви можете додати Error в кінці імені (якщо, звичайно, виключення дійсно є помилкою).

Імена глобальних змінних

Будемо сподіватися, що глобальні змінні використовуються тільки всередині одного модуля. Керуйтеся тими ж угодами, що і для імен функцій.

Імена функцій

Імена функцій повинні складатися з маленьких букв, а слова розділятися символами підкреслення - це необхідно, щоб збільшити читабельність.

Завжди використовуйте self як перший аргумент методу примірника об'єкта. Завжди використовуйте cls як перший аргумент методу класу. Якщо ім'я аргументу конфліктує із зарезервованим ключовим словом python, зазвичай краще додати в кінець імені символ підкреслення, ніж спотворити написання слова або використовувати абревіатуру. Таким чином, class_ краще, ніж clss. (Можливо, хорошим варіантом буде підібрати синонім).

Імена методів і змінних примірників класів

Використовуйте той же стиль, що і для імен функцій: імена повинні складатися з маленьких букв, а слова розділятися символами підкреслення. Використовуйте один символ підкреслення перед ім'ям для непублічних методів і атрибутів.

Константи

Константи зазвичай оголошуються на рівні модуля і записуються тільки великими літерами, а слова поділяються символами підкреслення. Наприклад: MAX_OVERFLOW, TOTAL.

Дзен Python

Дзен Python

Розробники мови Python є прихильниками певної філософії програмування, яку називають «The Zen of Python»

(«Дзен Пайтона»).

Її текст можна отримати у інтерпретаторі Python за допомогою команди (лише один раз за сесію)

The Zen of Python українською:

  • Гарне краще за потворне.
  • Очевидне краще за неочевидне.
  • Просте краще за складне.
  • Складне краще за заплутане.
  • Плоске краще за вкладене.
  • Розділене є кращим за щільне.
  • Легкість читання має значення.
  • Особливі випадки не є настільки особливими, щоб порушувати правила.
  • Хоча практичність є важливішою за бездоганність.
  • Помилки ніколи не повинні бути замовчуваними.
  • Хіба що замовчуваними відверто.
  • Зустрівши двозначність, відкиньмо спокусу вгадати.
  • Має бути один — і, бажано, тільки один — очевидний спосіб зробити це.
  • Хоча спочатку він може бути й не очевидним, якщо ви не голландець.
  • Зараз — краще, ніж ніколи.
  • Хоча ніколи, найчастіше, — краще, ніж просто зараз.
  • Якщо реалізацію важко пояснити — задум поганий.
  • Якщо реалізацію легко пояснити — можливо, задум добрий.
  • Простори імен — чудова річ, тож робімо їх більше!

import this

Що почитати?

Дякую за увагу!


скачати

© Усі права захищені
написати до нас