Как можно добавить функцию в глобальный список для функции eval?

#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)