Встроенная функция Python eval () - PullRequest
0 голосов
/ 05 июля 2018

После поиска какой-то ссылки в Интернете я все еще не понимаю, как на самом деле работает eval (), возможно, мне не хватает ключевого компонента, надеюсь, кто-то может направить меня к нужным документам или объяснениям.

Предположим:

def foo(x,y):
    print(x)
    print(y)

Используйте eval () для вызова foo ().

Пример 1:

eval('foo(1,2)') 

Пример 2:

eval('foo')(1,2)

Согласно документации на python 3.6, пример того, как я вызываю eval (), - это то, как это должно быть сделано, так как я передаю все в виде строки. Однако, например, # 2, я до сих пор не понимаю, почему интерпретатор Python также оценивает правильно. Для меня при запуске eval () во втором примере интерпретатор python должен вернуть TypeError, требующий 2 пропущенных аргумента. Я надеюсь, что кто-то может указать мне правильное направление.

1 Ответ

0 голосов
/ 05 июля 2018

Это допустимое выражение Python: foo. Это оценивает функцию. Вы можете позвонить. Вот почему foo(1, 2) работает. Вы также можете сделать это:

x = foo
x(1, 2)

Итак, eval("foo") вычисляет функцию foo, которую вы затем можете вызвать.

...