python3 print() в exec()
В Python3, когда я бегу
>>> exec("","","")
TypeError: exec() arg 2 must be a dict, not str
>>> exec( "print('Hello')", print("World"), print("!") )
World
!
Hello
>>> type(print("World"))
World
<class 'NoneType'>
Я имею в виду, что в Python3 arg2 из exec() ожидает dict, но мы все равно можем поставить функцию print(), которая не является dict. Зачем?
2 ответа
Решение
Просто!
Это приемлемо, потому что его значением является None (оно может принимать None или dict), которое является значением по умолчанию для аргумента.
В примере вызов, такой как:
exec("print('Hello')")
Такой же как:
exec("print('Hello')", None, None)
print
возвращается None
, который является допустимым аргументом для необязательного параметра.