суббота, 1 июня 2019 г.

ЛМНты Python, 1 - 5

>>> Выражения – это предложения

Выражения – полноценные предложения языка Python:

python
>>> 3.14
3.14
>>> [1,2] + [3]
[1, 2, 3]
>>> 'Привет, Python'
'Привет, Python'
>>> """Можно написать скрипт из одних выражений,
... и он выполнится без ошибок.
... """
'Можно написать скрипт из одних выражений,\nи он выполнится без ошибок.\n'
>>>

Документирующие строки Python (docstrings) – это выражения, состоящие из строкового литерала, а не особая конструкция, требующая специальной обработки.

>>> Всё – объекты

В Python всё – объекты или, иными словами, экземпляры некоторого класса. Узнать класс объекта позволяет функция type():

>>> type(1)
<class 'int'>
>>> s = 'hello'
>>> type(s)
<class 'str'>
>>> import math
>>> type(math)
<class 'module'>

Каждый объект в Python имеет уникальный идентификатор, возвращаемый функцией id():

>>> id(1)
1580032224
>>> id(s)
1642751040792
>>> id(math)
1642751050600

>>> Классификация животных

Объекты Python бывают изменяемые (mutable) и неизменяемые (immutable).

Объекты следующих встроенных классов неизменяемы: NoneType, bool, int, float, complex, str, tuple, frozenset. Так, при попытке изменить строку или число мы получим новый объект, а не прежний:

>>> s = 'hello'
>>> id(s)
2397821304424
>>> s += ' Python'
>>> id(s)
2397821338352

>>> x = 1
>>> id(x)
1607098592
>>> x += 1
>>> id(x)
1607098624

Объекты следующих встроенных классов изменяемы: list, dict, set. Список или словарь изменяются, но и после изменения это все те же объекты с теми же id:

>>> a = [0, 1, 2]
>>> id(a)
2397821326408
>>> a[0] = 3
>>> id(a)  # тот же список
2397821326408

>>> d = {'a': 0, 'b': 2}
>>> id(d)
2397821291976
>>> d['a'] = 1
>>> id(d)  # тот же словарь
2397821291976

>>> Единственный и неизменный

Неизменяемые объекты – это, по сути, константы, что позволяет держать в памяти только один неизменяемый объект с данным значением. Так, объекты None, True и False существуют в единственных экземплярах во время выполнения программы.

Независимо от того, как мы получили значение True, оно представлено одним и тем же объектом:

>>> id(1 == 1) == id(True)
True
>>> id(bool(1)) == id(not False)
True

Это же справедливо для None:

>>> # функция print() возвращает None
... res = print()

>>> id(res) == id(None)
True

Строки – неизменяемые объекты класса str – демонстрируют такое же поведение:

>>> s = 'hi'
>>> id('hi') == id(s)
True
>>> s2 = 'h' + 'i'
>>> id(s) == id(s2)
True

Впрочем, такое поведение не обязательно для всех неизменяемых объектов и зависит от реализации.

>>> Цепочки сравнений

В Python можно строить цепочки сравнений, например:

>>> 1 < 3 < 5
True

Это была проверка вхождения среднего члена в диапазон, заданный крайними членами. Логически эквивалентно выражению

>>> 1 < 3 and 3 < 5
True

Ещё примеры цепочек сравнений:

>>> 'hi' == 'h'+'i' == 'HI'.lower()
True
>>> 100 > 50 >= 3.14 > -1
True
>>> 1 < 2 != 5 == 10/2 > 3
True

Не злоупотребляйте такими цепочками! Последняя почти нечитабельна и с-трудом-понимабельна.

Комментариев нет:

Отправить комментарий