#python
#python
Вопрос:
Это мой код:
def printMeToo(val):
print(val)
z = 'This is amazing'
expression = 'printMeToo(z)'
eval(expression)
# This eval fails
myGlobals = {'z':z}
eval(expression, myGlobals)
Комментарии:
1.
myGlobals = {'printMeToo': printMeToo}
2. @Tomerikoo Не добрый.
3. Извините, если я вас обидел, это вовсе не входило в мои намерения. Я удалил этот комментарий. Я просто имел в виду, что, похоже, вы знаете о том факте, что передача dict служит глобальными значениями для оценки, поэтому мне было интересно, почему вы удивляетесь, если
z
есть, аprintMeToo
есть нет…
Ответ №1:
Причина в том, что при втором вызове вы переопределяете глобальные переменные, следовательно printMeToo
, их больше нет. Попробуйте:
>>> myGlobals = {'z': z, 'printMeToo': printMeToo}
>>> eval(expression, myGlobals)
This is amazing
Ответ №2:
Вы должны добавить функцию в переменную myGlobals.
myGlobals = {'printMeToo':printMeToo, "z":z}
eval(expression, myGlobals)
Ответ №3:
Вы должны добавить printMeToo
в глобальные переменные, иначе eval просто разрешит __builtins__
и z
def printMeToo(val):
print(val)
z = 'This is amazing'
expression = 'printMeToo(z)'
eval(expression)
myGlobals = {'z':z,'printMeToo':printMeToo}
eval(expression, myGlobals)