Разъяснивший Python
رفتن به کانال در Telegram
Твой проводник в омут Python'а Ссылка: @Portal_v_IT Сотрудничество: @oleginc
نمایش بیشتر6 893
مشترکین
+224 ساعت
-97 روز
-6430 روز
آرشیو پست ها
6 890
__getattribute__ и __getattr__
Это особые методы, которые вызываются при попытке получить какой-либо атрибут класса. Например, foo.var вызовет __getattribute__, а после, возможно __getattr__.
Отличие между методами только в том, что __getattribute__ используется всегда, а __getattr__ только если атрибут не найден.
#объяснение6 890
Про copy
В python есть модуль, который называется copy. У него только две функции:
copy() и deepcopy().
copy(x) — поверхностно копирует объект и вставляет в него ссылки на объекты, обнаруженные в оригинале.
deepcopy(x) — Создаёт новый объект и рекурсивно вставляет в него копии объектов, которые нашёл в оригинале.
#объяснение6 890
Что такое
@wraps?
Это декоратор из модуля functools, который используется для создания декораторов.
Он обновляет значения __module__, __name__, __doc__ на значение реальной функции, а не декоратора, а также добавляет __wrapped__ для получения доступа к декорируемой функции.
Подробнее можно почитать в документации.
#объяснение6 890
Про переменные и их названия
В python можно встретить переменные по типу
name, _name, __name. Но что значат эти подчёркивания перед названием?
_name — индикатор того, что это внутренняя переменная и работать с ней напрямую не стоит. Также при from M import * не импортирует объекты, что начинаются на _.
__name — заменяет имя на _classname__name, где classname — это имя текущего класса с удаленными начальными символами подчеркивания. Используется для определения частных переменных, которыми никто не должен пользоваться.
#объяснение6 890
Булевые операции
x or y — если x правда (True), возвращает x, иначе y.
x and y — если x правда (True), возвращает y, иначе x.
#объяснение6 890
Разница между is и ==
Каждый объект хранится в памяти и имеет свой номер, по которому можно его найти. Этот номер можно получить с помощью функции
id().
is занимается сравниванием этих самых адресов. В то время как == вызывает функцию __eq__ и предназначения для сравнения значений класса.
Представьте куб, а потом ещё один такой же. Они одинаковые, но это два абсолютно разных объекта. Также и в программировании.
#объяснение6 890
Python оптимизировал создание строки
С помощью dis мы можем посмотреть байт-код программы.
Здесь мы видим, что 'hello' и 'hell' + 'o' ничем не отличается друг от друга, а значит Python поступил по умному и оптимизировал код.
#объяснение
6 890
Кэширование строк
Стоит отметить, что это очень сильно зависит от интерпретатора Python. Также правила могут измениться в будущем.
Короткие строки в Python кэшируются интерпретатором при инициализации. Это используется для сохранения памяти.
Если вы хотите поэкспериментировать, можете установить Python 2.7 и поиграться с функцией
intern(), которая принудительно кэширует строку.
#объяснение