Ошибка не возникает, потому что в Python 3 print
является обычной функцией. И объекты функций связаны с именами, поэтому print
- это имя («переменная»), которое относится к конкретному объекту функции.
Поскольку функции не отличаются от переменных, вы можете переназначить их, как вам угодно :
def add(a, b):
return a + b
add = "ha-ha, I'm a string"
Скобки после знака =
- это те скобки, которые вы используете в математике:
print = (1 + 2) # print == 3
Скобки сразу после имени представляют вызов функции.
Но теперь print
сломан, и вы никогда не сможете ничего напечатать! Не совсем - есть копия в __builtins__.print
:
print = __builtins__.print
Однако вы можете испортить это так же легко:
__builtins__.print = 5
В Python 2, однако , print
- это оператор, не - обычная функция, поэтому она не работает:
Python 2.7.16 (default, Dec 3 2019, 07:02:07)
>>> print = 5
File "<stdin>", line 1
print = 5
^
SyntaxError: invalid syntax