Вопросы с тегом «python-internals»

Как Python работает под капотом? Используйте для вопросов, касающихся (например) принятых проектных решений и используемых внутренних структур данных и алгоритмов.

2117
Почему «1000000000000000 в диапазоне (1000000000000001)» так быстро в Python 3?

Насколько я понимаю, range()функция, которая на самом деле является типом объекта в Python 3 , генерирует свое содержимое на лету, подобно генератору. В этом случае я ожидал, что следующая строка займет неоправданное количество времени, потому что для определения того, находится ли 1 квадриллион в...

982
Как работает @property декоратор?

Я хотел бы понять, как работает встроенная функция property. Что меня смущает, так это то, что он propertyтакже может быть использован в качестве декоратора, но он принимает аргументы только тогда, когда используется как встроенная функция, а не как декоратор. Этот пример из документации : class...

509
Оператор «is» ведет себя неожиданно с целыми числами

На этот вопрос есть ответы на Переполнение стека на русском языке : Присваивание целых (int) в Питоне Почему следующие действия ведут себя неожиданно в Python? >>> a = 256 >>> b = 256 >>> a is b True # This is an expected result >>> a = 257 >>> b = 257...

470
Заказаны ли словари в Python 3.6+?

Словари упорядочены в Python 3.6 (по крайней мере, под реализацию CPython) в отличие от предыдущих воплощений. Это кажется существенным изменением, но это только короткий параграф в документации . Он описывается как подробность реализации CPython, а не как языковая функция, но также подразумевает,...

375
Когда Del полезен в Python?

Я не могу придумать причину, по которой python нуждается в delключевом слове (и большинство языков, похоже, не имеют аналогичного ключевого слова). Например, вместо того, чтобы удалить переменную, можно просто присвоить Noneей. И при удалении из словаря, delметод может быть добавлен. Есть ли...

284
Почему некоторые сравнения с плавающей запятой в четыре раза медленнее других?

При сравнении значений с плавающей точкой и целых чисел некоторым парам значений требуется гораздо больше времени для оценки, чем другим значениям схожей величины. Например: >>> import timeit >>> timeit.timeit("562949953420000.7 < 562949953421000") # run 1 million times...

244
Что такое глобальная блокировка интерпретатора (GIL) в CPython?

Что такое глобальная блокировка интерпретатора и почему это проблема? Было много шума вокруг удаления GIL из Python, и я хотел бы понять, почему это так важно. Я никогда не писал ни компилятор, ни интерпретатор, так что не будьте скромны с деталями, мне, вероятно, понадобится их...

174
Доступ к переменным класса из списка понимания в определении класса

Как вы получаете доступ к другим переменным класса из понимания списка в определении класса? Следующее работает в Python 2, но не работает в Python 3: class Foo: x = 5 y = [x for i in range(1)] Python 3.2 выдает ошибку: NameError: global name 'x' is not defined Попытка Foo.xтоже не работает. Любые...

155
Почему два одинаковых списка имеют разный объем памяти?

Я создал два списка l1и l2, но каждый со своим методом создания: import sys l1 = [None] * 10 l2 = [None for _ in range(10)] print('Size of l1 =', sys.getsizeof(l1)) print('Size of l2 =', sys.getsizeof(l2)) Но результат меня удивил: Size of l1 = 144 Size of l2 = 192 Список, созданный с пониманием...

153
Почему массивы Python медленные?

Я ожидал, array.arrayчто будет быстрее, чем списки, так как массивы кажутся распакованными. Однако я получаю следующий результат: In [1]: import array In [2]: L = list(range(100000000)) In [3]: A = array.array('l', range(100000000)) In [4]: %timeit sum(L) 1 loop, best of 3: 667 ms per loop In [5]:...

152
Почему порядок в словарях и множествах произвольный?

Я не понимаю, как зацикливание словаря или набора в python осуществляется в произвольном порядке. Я имею в виду, что это язык программирования, поэтому все в языке должно быть определено на 100%, верно? У Python должен быть какой-то алгоритм, который решает, какая часть словаря или набора выбрана,...

151
Можно ли взломать функцию печати Python?

Примечание. Этот вопрос носит исключительно информационный характер. Мне интересно посмотреть, как глубоко во внутренностях Python можно пойти с этим. Не так давно внутри определенного вопроса началось обсуждение того, можно ли изменить строки, переданные в операторы print, после / во время вызова...

136
Что вызывает [* a] перераспределение?

По-видимому list(a), не перераспределяет, [x for x in a]перераспределяет в некоторых точках, и [*a]перераспределяет все время ? Вот размеры n от 0 до 12 и результирующие размеры в байтах для трех методов: 0 56 56 56 1 64 88 88 2 72 88 96 3 80 88 104 4 88 88 112 5 96 120 120 6 104 120 128 7 112 120...