Обновить

Комментарии 13

Весьма интересно!

Где делали такие картинки к статье?

Adobe After Effects

Спасибо!

Не надо так пугать людей превьюхой - я думал у меня монитор глючить начал (дрожать) 😆
... ну или с глазами уже совсем всё плохо стало...

Забавно, что в эпическом тексте про приколы питона "WTF, Python!" нет ничего про ~, а я думал там есть всё. Кто не читал, очень рекомендую: https://github.com/satwikkansal/wtfpython

Воистину Perl-программу можно написать на любом языке!

Интересно было почитать. Спасибо.

Позанудствую.

Разумеется, продолжать "заглядывать внутрь" можно бесконечно долго:

Предел всё-таки есть:

>>> lst = []
>>> lst.append(lst)
>>> idx = '[0]'
>>> eval(f'print(lst{idx*2995} is lst)')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RecursionError: maximum recursion depth exceeded during compilation
>>>

Я не специалист, но тут пишут, что предел можно отодвинуть:

import sys
sys.setrecursionlimit(10000) # 10000 is an example, try with different values

Ссылка на источник:

Скрытый текст

Да я тоже не специалист. С юности имею дурную привычку проверять утверждения из газет. В примере по ссылке речь о лимите в рантайме, а тут - при компиляции:

>>> from sys import setrecursionlimit as reclim
>>> reclim(10000)
>>> lst = []
>>> lst.append(lst)
>>> idx = '[0]'
>>> eval(f'print(lst{idx*2995} is lst)')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RecursionError: maximum recursion depth exceeded during compilation
>>>

У python есть несколько режимов работы. Ключевые параметры в них могут сильно отличаться. Как и возможности их изменения. В рантайме ограничение где-то в 3 раз меньше. А при компиляции почему-то вот такое. И как на него повилять я уже не знаю.

Спасибо за подробности - если бы у меня была карма то плюсанул бы. 🤝

Если вдруг вы, как и я, зависли над

print(False == False in [False]) # Вывод: True

То объяснение - chaining операторов сравнения, это выражение эквивалентно

print(False == False and False in [False])

Которое, действительно, True, и никакой особой связи с int'ами здесь нет.
P.S. имхо, не стоит так писать.

Про all и any обоснование такое. "Плюс" обозначает контактенцию списков.

Очевидно, что `all(a + b) = all(a) and all(b)` . Также очевидно, что если `b = []` , то `all(a + b) = all(a)` . Отсюда получаем, что all([]) должно быть равно True.

Аналогичную логику можно привести для any

Все лучше осознаю факт того, что все сложное строиться на осознании базовых принципов. Спасибо за статью, заставило немного задуматься)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации