Вопросы по теме 'python-internals'

Как переопределить операции копирования / глубокого копирования для объекта Python?
Я понимаю разницу между copy и deepcopy в модуле копирования. Раньше я успешно использовал copy.copy и copy.deepcopy , но это первый раз, когда я действительно перегрузил методы __copy__ и __deepcopy__ . Я уже погуглил и просмотрел...
71085 просмотров
schedule 05.01.2023

Как определяется переменная __name__ в модуле Python?
Мне известен стандартный пример : если вы выполняете модуль непосредственно, то глобальная переменная __name__ определяется как "__main__" . Однако нигде в документации я не могу найти точного описания того, как __name__ определяется в общем...
21940 просмотров
schedule 22.03.2023

Два экземпляра одного и того же модуля Python?
Я создал модуль Python с одной функцией, которая просто печатает «a!». Я открыл интерпретатор Python и импортировал модуль с двумя разными синтаксисами. >>> import a >>> from a import func >>> func() a! >>>...
3661 просмотров

Неожиданное значение из sys.getrefcount
Под Python 2.7.5 >>> import sys >>> sys.getrefcount(10000) 3 Где три рефкаунта? PS: когда 10000 PyIntObject будет Py_DECREF до 0 ref и освобожден? Не говоря уже о gc, сам счетчик ссылок может работать без gc.
454 просмотров
schedule 19.12.2022

Почему одна переменная класса не определена в понимании списка, а другая?
Я только что прочитал ответ на этот вопрос: Доступ к переменным класса из понимания списка в определении класса Это помогает мне понять, почему следующий код приводит к NameError: name 'x' is not defined : class A: x = 1 data = [0,...
3570 просмотров

Почему итерация по небольшой строке выполняется медленнее, чем по небольшому списку?
Я играл с timeit и заметил, что выполнение простого понимания списка для небольшой строки занимает больше времени, чем выполнение той же операции для списка небольших строк с одним символом. Любое объяснение? Это почти в 1,35 раза больше времени....
14575 просмотров

Имеет ли оператор Python «in» для списков ранний выход для успешного поиска
Если у меня есть список, я ищу элемент в списке: alist=[ele1, ele2, ele3, ele4,ele5,...] if ele3 in alist: print "found" Будет ли остановлен поиск из списка на ele3? Или он будет работать через весь оставшийся элемент до конца. Заранее...
302 просмотров

Изменяемость globals() и locals()
В Python globals() возвращает представление глобальной таблицы символов, а locals() возвращает представление локального состояния. Хотя оба возвращают словарь, изменения в globals() вступают в силу в глобальной таблице символов, в то время как...
270 просмотров
schedule 20.06.2022

Гарантировано ли определение __module__ во время создания класса?
Я читал какой-то код, который выглядел примерно так: class Foo(object): class_name = __module__.replace('_', '-') Для меня это выглядело очень странно ( __module__ , что это такое?), поэтому я пошел и посмотрел на модель данных python....
2046 просмотров
schedule 09.05.2022

Как работает интерактивный режим Python?
Я хочу знать, как работает интерактивный режим Python. Обычно, когда вы запускаете скрипт Python на CPython, он проходит через процесс лексического анализа, синтаксического анализа, компилируется в файл .pyc и, наконец, файл .pyc...
571 просмотров

Почему строка startwith медленнее, чем in?
Удивительно, но я обнаружил, что startswith медленнее, чем in : In [10]: s="ABCD"*10 In [11]: %timeit s.startswith("XYZ") 1000000 loops, best of 3: 307 ns per loop In [12]: %timeit "XYZ" in s 10000000 loops, best of 3: 81.7 ns per loop...
4043 просмотров

Почему класс __dict__ является прокси-сервером?
Интересно, почему класс __dict__ — это mappingproxy , а экземпляр __dict__ — это просто dict >>> class A: ... pass >>> a = A() >>> type(a.__dict__) <class 'dict'> >>> type(A.__dict__) <class...
18285 просмотров

Почему Python использует исключения для управления итераторами, а другие языки - нет?
В Java итераторы имеют метод hasNext() (если я правильно помню - прошло много времени с тех пор, как я программировал на Java, поэтому подробности могут быть отключены). Когда вы проходите через итератор, вы запрашиваете hasNext() , чтобы узнать,...
133 просмотров

Каков исходный код __hash__() и __eq__() объекта в Python?
object является основой для всех новых классов стилей. Где я могу найти исходный код object ? Я хотел бы посмотреть, как определены функции __hash__() и __eq__() . Обратитесь к этому ответу ( Поиск исходного кода для встроенного Python...
587 просмотров
schedule 12.03.2023

Почему код с промежуточными переменными быстрее, чем код без них?
Я столкнулся с этим странным поведением и не смог его объяснить. Это ориентиры: 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 =...
6125 просмотров

Что такое __weakref__ в Python?
Удивительно, но нет явной документации для __weakref__ . Слабые ссылки объясняются здесь . __weakref__ также кратко упоминается в документации __slots__ . Но про сам __weakref__ ничего не нашел. Что такое __weakref__ ? - Это просто...
19585 просмотров
schedule 23.07.2022

Почему у списков есть специальный метод __reverse__(), а у кортежей нет в Python?
Встроенный в Python reversed(seq) указывает, что seq должен иметь метод __reversed__() или поддерживать протокол последовательности. И списки, и кортежи, очевидно, поддерживают протокол последовательности, но вместо этого в списках...
107 просмотров
schedule 31.01.2023

Почему '() is ()' возвращает True, когда '[] is []', а '{} is {}' возвращает False?
Насколько мне известно, использование [], {} или () для создания экземпляров объектов возвращает новый экземпляр list, dict или tuple соответственно; новый экземпляр объекта с новым идентификатором . Это было довольно ясно для меня, пока...
3999 просмотров

list () использует немного больше памяти, чем понимание списка
Итак, я играл с list объектами и обнаружил небольшую странную вещь, что если list создается с list() , он использует больше памяти, чем понимание списка? Я использую Python 3.5.2 In [1]: import sys In [2]: a = list(range(100)) In [3]:...
4131 просмотров

Почему «новый_файл + = строка + строка» намного быстрее, чем «новый_файл = новый_файл + строка + строка»?
Нашему коду требуется 10 минут для перекачки 68000 записей, когда мы используем: new_file = new_file + line + string Однако когда мы делаем следующее, это занимает всего 1 секунду: new_file += line + string Вот код: for line in...
1247 просмотров