Comments 13
Весьма интересно!
Где делали такие картинки к статье?
Не надо так пугать людей превьюхой - я думал у меня монитор глючить начал (дрожать) 😆
... ну или с глазами уже совсем всё плохо стало...
Забавно, что в эпическом тексте про приколы питона "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
Все лучше осознаю факт того, что все сложное строиться на осознании базовых принципов. Спасибо за статью, заставило немного задуматься)
Python: неочевидное и вероятное