Запитання з тегом «python-internals»

Як працює Python під кришкою? Використовуйте для запитань, що стосуються (наприклад) прийнятих проектних рішень та використовуваних внутрішніх структур даних та алгоритмів.

4
Чому копіювання перетасованого списку відбувається набагато повільніше?
Копіювання перетасованого range(10**6)списку десять разів займає близько 0,18 секунди: (це п’ять запусків) 0.175597017661 0.173731403198 0.178601711594 0.180330912952 0.180811964451 Копіювання десятикратного перекладу списку займає приблизно 0,05 секунди: 0.058402235973 0.0505464636856 0.0509734306934 0.0526022752744 0.0513324916184 Ось мій код тестування: from timeit import timeit import random a = range(10**6) random.shuffle(a) # Remove this for the second …

1
Що з цілочисельним кешем, що підтримується інтерпретатором?
Занурившись у вихідний код Python, я виявляю , що він підтримує масив PyInt_Objects, починаючи від int(-5)до int(256)(@ src / Objects / intobject.c) Невеликий експеримент це доводить: >>> a = 1 >>> b = 1 >>> a is b True >>> a = 257 >>> b = 257 >>> a is …

1
Python: чому * та ** швидші за / та sqrt ()?
Оптимізуючи свій код, я зрозумів наступне: >>> from timeit import Timer as T >>> T(lambda : 1234567890 / 4.0).repeat() [0.22256922721862793, 0.20560789108276367, 0.20530295372009277] >>> from __future__ import division >>> T(lambda : 1234567890 / 4).repeat() [0.14969301223754883, 0.14155197143554688, 0.14141488075256348] >>> T(lambda : 1234567890 * 0.25).repeat() [0.13619112968444824, 0.1281130313873291, 0.12830305099487305] а також: >>> from math …

2
list () використовує трохи більше пам'яті, ніж розуміння списку
Тож я грав з listпредметами і виявив трохи дивної речі, яка, якщо listстворена з list()нею, використовує більше пам'яті, ніж розуміння списку? Я використовую Python 3.5.2 In [1]: import sys In [2]: a = list(range(100)) In [3]: sys.getsizeof(a) Out[3]: 1008 In [4]: b = [i for i in range(100)] In [5]: …

6
Чому я можу використовувати одне і те ж ім'я для ітератора та послідовності в циклі Python for?
Це більше концептуальне питання. Нещодавно я побачив шматок коду в Python (він працював у 2.7, а також міг бути запущений і в 2.5), в якому forцикл використовував одне і те ж ім'я як для списку, який повторювався, так і для елемента у списку , що видається мені як поганою практикою, …


2
Чому код використовує проміжні змінні швидше, ніж код без?
Я зіткнувся з цією дивною поведінкою і не зміг пояснити. Ось еталони: py -3 -m timeit "tuple(range(2000)) == tuple(range(2000))" 10000 loops, best of 3: 97.7 usec per loop py -3 -m timeit "a = tuple(range(2000)); b = tuple(range(2000)); a==b" 10000 loops, best of 3: 70.7 usec per loop Як так, …

4
Чому я отримую таку кількість ітерацій під час додавання та вилучення із набору під час ітерації над ним?
Намагаючись зрозуміти Python for-loop, я подумав, що це дасть результат {1}за одну ітерацію або просто застрягне в нескінченному циклі, залежно від того, чи робить це ітерація, як на C чи інших мовах. Але насправді це не зробило жодне. >>> s = {0} >>> for i in s: ... s.add(i + …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.