Кэширование строк
Стоит отметить, что это очень сильно зависит от интерпретатора Python. Также правила могут измениться в будущем.
Короткие строки в Python кэшируются интерпретатором при инициализации. Это используется для сохранения памяти.
Если вы хотите поэкспериментировать, можете установить Python 2.7 и поиграться с функцией
#объяснение
Стоит отметить, что это очень сильно зависит от интерпретатора Python. Также правила могут измениться в будущем.
Короткие строки в Python кэшируются интерпретатором при инициализации. Это используется для сохранения памяти.
Если вы хотите поэкспериментировать, можете установить Python 2.7 и поиграться с функцией
intern()
, которая принудительно кэширует строку.#объяснение
Python оптимизировал создание строки
С помощью dis мы можем посмотреть байт-код программы.
Здесь мы видим, что 'hello' и 'hell' + 'o' ничем не отличается друг от друга, а значит Python поступил по умному и оптимизировал код.
#объяснение
С помощью dis мы можем посмотреть байт-код программы.
Здесь мы видим, что 'hello' и 'hell' + 'o' ничем не отличается друг от друга, а значит Python поступил по умному и оптимизировал код.
#объяснение
Разница между is и ==
Каждый объект хранится в памяти и имеет свой номер, по которому можно его найти. Этот номер можно получить с помощью функции
is занимается сравниванием этих самых адресов. В то время как == вызывает функцию
Представьте куб, а потом ещё один такой же. Они одинаковые, но это два абсолютно разных объекта. Также и в программировании.
#объяснение
Каждый объект хранится в памяти и имеет свой номер, по которому можно его найти. Этот номер можно получить с помощью функции
id()
.is занимается сравниванием этих самых адресов. В то время как == вызывает функцию
__eq__
и предназначения для сравнения значений класса.Представьте куб, а потом ещё один такой же. Они одинаковые, но это два абсолютно разных объекта. Также и в программировании.
#объяснение
Булевые операции
#объяснение
x or y
— если x правда (True), возвращает x, иначе y.x and y
— если x правда (True), возвращает y, иначе x.#объяснение
Про переменные и их названия
В python можно встретить переменные по типу
#объяснение
В python можно встретить переменные по типу
name
, _name
, __name
. Но что значат эти подчёркивания перед названием?_name
— индикатор того, что это внутренняя переменная и работать с ней напрямую не стоит. Также при from M import *
не импортирует объекты, что начинаются на _. __name
— заменяет имя на _classname__name
, где classname — это имя текущего класса с удаленными начальными символами подчеркивания. Используется для определения частных переменных, которыми никто не должен пользоваться.#объяснение
Что такое
Это декоратор из модуля functools, который используется для создания декораторов.
Он обновляет значения
Подробнее можно почитать в документации.
#объяснение
@wraps
?Это декоратор из модуля functools, который используется для создания декораторов.
Он обновляет значения
__module__
, __name__
, __doc__
на значение реальной функции, а не декоратора, а также добавляет __wrapped__
для получения доступа к декорируемой функции.Подробнее можно почитать в документации.
#объяснение
Про copy
В python есть модуль, который называется copy. У него только две функции:
#модули
В python есть модуль, который называется copy. У него только две функции:
copy()
и deepcopy()
.copy(x)
— поверхностно копирует объект и вставляет в него ссылки на объекты, обнаруженные в оригинале.deepcopy(x)
— Создаёт новый объект и рекурсивно вставляет в него копии объектов, которые нашёл в оригинале.#модули
__getattribute__
и __getattr__
Это особые методы, которые вызываются при попытке получить какой-либо атрибут класса. Например, foo.var вызовет __getattribute__
, а после, возможно __getattr__
.Отличие между методами только в том, что
__getattribute__
используется всегда, а __getattr__
только если атрибут не найден.#объяснение
Статические переменные
Это переменная, которая создаётся вместе с типом и существует до закрытия приложения.
Все переменные, что находится внутри класса, но не попадают в ни один метод являются статическими.
#объяснение
Это переменная, которая создаётся вместе с типом и существует до закрытия приложения.
Все переменные, что находится внутри класса, но не попадают в ни один метод являются статическими.
#объяснение
Оператор моржа
Это фишка Python c версии 3.9. Она позволяет задавать значение переменной и одновременно его возвращать для последующей обработки.
Его довольно удобно использовать в генераторных выражениях, ведь это делает код не только чище, но и быстрее.
#объяснение
Это фишка Python c версии 3.9. Она позволяет задавать значение переменной и одновременно его возвращать для последующей обработки.
Его довольно удобно использовать в генераторных выражениях, ведь это делает код не только чище, но и быстрее.
#объяснение
Возможности срезов
С помощью срезов мы можем менять элементы списка. Называют это так: «Изменение путем присваивания».
Таким образом мы заменяем элементы внутри этого среза другими из итератора (list, tuple, range).
С их помощью мы также можем добавлять/удалять элементы, опустошать список и многое другое.
Стоит отметить, что в разреженных срезах ([::2]) такое не работает, если длина итератора не равна длине результата среза.
#объяснение
С помощью срезов мы можем менять элементы списка. Называют это так: «Изменение путем присваивания».
Таким образом мы заменяем элементы внутри этого среза другими из итератора (list, tuple, range).
С их помощью мы также можем добавлять/удалять элементы, опустошать список и многое другое.
Стоит отметить, что в разреженных срезах ([::2]) такое не работает, если длина итератора не равна длине результата среза.
#объяснение
Сравнение последовательностей
При использовании оператор больше (>) или меньше (<) с строками, котрежами, списками, они сравниваются последовательно, то есть элемент с элементом.
Есть только небольшой нюанс при проверке строк. Они сравниваются по их позиции в таблице Unicode, которую можно получить с помощью
#объяснение
При использовании оператор больше (>) или меньше (<) с строками, котрежами, списками, они сравниваются последовательно, то есть элемент с элементом.
Есть только небольшой нюанс при проверке строк. Они сравниваются по их позиции в таблице Unicode, которую можно получить с помощью
ord(char)
.#объяснение
Нижние подчёркивание между цифрами
Они никак не влияют на приложение и используются для того, чтобы числа было удобнее считывать при больших значениях.
Таким образом можно разделять десятки, сотни, тысячи и так далее.
#объяснение
Они никак не влияют на приложение и используются для того, чтобы числа было удобнее считывать при больших значениях.
Таким образом можно разделять десятки, сотни, тысячи и так далее.
#объяснение
Про упаковку и распаковку
Распаковку задаёт переменным значения итерируемого объекта (список, кортеж, строка, генератор).
Упаковка позволяет собрать несколько значений в один список и после работать с ними.
Эти фишки делают код более красивым и элегантным, но стоит знать меру.
#объяснение
Распаковку задаёт переменным значения итерируемого объекта (список, кортеж, строка, генератор).
Упаковка позволяет собрать несколько значений в один список и после работать с ними.
Эти фишки делают код более красивым и элегантным, но стоит знать меру.
#объяснение