Как я могу вызвать функцию со строковым значением, равным имени функции - PullRequest
1 голос
/ 10 ноября 2019

Я пытаюсь вызвать myFunc () , но я хочу использовать строковое значение, равное "myFunc" вместо ввода вручную при вызове.

Вот пример, который я пытаюсь сделать;

a = "myFunc"

def myFunc():
   print("Bla bla")

a() ### How can i compile this code like its myFunc()


Ответы [ 3 ]

2 голосов
/ 10 ноября 2019

В вашем примере myFunc является глобальной переменной, поэтому:

globals()[a]()

Если вы посмотрите на диктовку, возвращаемую globals(), вы увидите (среди других элементов):

{'a': 'myFunc', 'myFunc': <function myFunc at 0x0119B618>}
0 голосов
/ 10 ноября 2019

Да, вы можете назвать его с помощью eval следующим образом:

a = "myFunc()" 

def myFunc(): 
print("Bla bla") 

eval(a)                                                                                                                                             
Bla bla  

Помогает ли это? Спасибо! Eval полезен для вызова функций в списке, например, вы можете перебрать список функций, например:

for item in functionlist:
  eval(item)
0 голосов
/ 10 ноября 2019

Я могу придумать два способа сделать это:

Используя глобальное пространство имен

In [1]: def myfunc():
...:     print('Bla bla!') 
In [2]: a = 'myfunc'
In [3]: globals()[a]()
Bla bla! 

Или используя eval

In [4]: eval(a + '()')
Bla bla!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...