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

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

4
Чому масиви 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]: %timeit …

4
Чи можна "зламати" функцію друку Python?
Примітка. Це запитання призначене лише для ознайомлення. Мені цікаво побачити, наскільки глибоко у внутрішніх умовах Python можна піти з цим. Не так давно почалося обговорення у певному питанні щодо того, чи можна рядки, передані для друку заяв, змінюватись після / під час виклику print. Наприклад, розглянемо функцію: def print_something(): print('This …

6
Чому порядок у словниках і множинах довільний?
Я не розумію, як циклічне обслуговування словника чи набору в python робиться "довільним" порядком. Я маю на увазі, це мова програмування, тому все в мові повинно бути визначено на 100%, правильно? Python повинен мати якийсь алгоритм, який визначає, яку частину словника чи набору обрано, 1-ю, другу та інше. Що я …



3
Чому ітерація над невеликим рядком повільніше, ніж за малим списком?
Я розігрувався з timeit і зауважив, що робити просте розуміння списку невеликою струною потрібно довше, ніж виконувати ту саму операцію зі списком невеликих одиночних рядків символів. Будь-яке пояснення? Це майже в 1,35 рази більше часу. >>> from timeit import timeit >>> timeit("[x for x in 'abc']") 2.0691067844831528 >>> timeit("[x for …

1
Чому str.translate набагато швидше в Python 3.5 порівняно з Python 3.4?
Я намагався видалити небажані символи з заданої рядки за допомогою програми text.translate()Python 3.4. Мінімальний код: import sys s = 'abcde12345@#@$#%$' mapper = dict.fromkeys(i for i in range(sys.maxunicode) if chr(i) in '@#$') print(s.translate(mapper)) Це працює як очікувалося. Однак однакова програма при виконанні в Python 3.4 та Python 3.5 дає велику різницю. …

2
Чи оптимізує Python змінну, яка використовується лише як повернене значення?
Чи є якась остаточна різниця між наступними двома фрагментами коду? Перший присвоює значення змінній функції, а потім повертає цю змінну. Друга функція просто повертає значення безпосередньо. Чи перетворює Python їх на еквівалентний байт-код? Чи один з них швидший? Випадок 1 : def func(): a = 42 return a Випадок 2 …

4
Чому кортежі займають менше місця в пам'яті, ніж списки?
A tupleзаймає менше пам’яті в Python: >>> a = (1,2,3) >>> a.__sizeof__() 48 тоді як lists займає більше місця в пам'яті: >>> b = [1,2,3] >>> b.__sizeof__() 64 Що відбувається всередині управління пам'яттю Python?


7
Як замінити операції копіювання / глибокого копіювання для об'єкта Python?
Я розумію різницю між модулем копіювання copyта проти deepcopy. Я використовував copy.copyі copy.deepcopyраніше успішно, але це перший раз, коли я насправді перейшов до перевантаження методів __copy__і __deepcopy__. Я вже Гугл і подивився через вбудовані модулі Python шукати екземпляри __copy__і __deepcopy__функції (наприклад sets.py, decimal.pyі fractions.py), але я до сих пір не …

4
Коли хеш (n) == n у Python?
Я грав з хеш-функцією Python . Для малих цілих чисел воно з’являється hash(n) == nзавжди. Однак це не поширюється на велику кількість: >>> hash(2**100) == 2**100 False Я не здивований, я розумію, що хеш приймає обмежений діапазон значень. Що це за діапазон? Я намагався використовувати двійковий пошук, щоб знайти найменше …

1
Чому кортеж (set ([1, "a", "b", "c", "z", "f"])) == кортеж (set (["a", "b", "c", "Z", "f", 1])) 85% часу з увімкненою хеш-рандомізацією?
Враховуючи відповідь Нуля Пірея на інше питання , ми маємо це x = tuple(set([1, "a", "b", "c", "z", "f"])) y = tuple(set(["a", "b", "c", "z", "f", 1])) print(x == y) Друкує Trueблизько 85% часу з увімкненою рандомізацією хешу . Чому 85%?

3
Чому макс повільніше сортування?
Я виявив, що maxце повільніше, ніж sortфункція в Python 2 і 3. Python 2 $ python -m timeit -s 'import random;a=range(10000);random.shuffle(a)' 'a.sort();a[-1]' 1000 loops, best of 3: 239 usec per loop $ python -m timeit -s 'import random;a=range(10000);random.shuffle(a)' 'max(a)' 1000 loops, best of 3: 342 usec per loop Python 3 …

2
Коли файли .pyc оновлюються?
Я розумію, що файли ".pyc" - це компільовані версії простого тексту ".py" файлів, створених під час виконання для швидшого запуску програм. Однак я спостерігав кілька речей: Після модифікації файлів "py" поведінка програми змінюється. Це вказує на те, що файли "py" компілюються або, принаймні, виконуються через якийсь хеш-процес або порівнюються позначки …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.