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, который является допустимым аргументом для необязательного параметра.

Другие вопросы по тегам