我有進口函數名的列表蟒蛇進口功能,我可以調用如下:呼叫使用字符串
from myfile import function1
from myfile import function2
function1()
function2()
我怎麼會調用的函數從名稱列表?例如:
fns = ['function1', 'function2']
for fn in fns:
fn()
我會如何正確執行上述操作?
我有進口函數名的列表蟒蛇進口功能,我可以調用如下:呼叫使用字符串
from myfile import function1
from myfile import function2
function1()
function2()
我怎麼會調用的函數從名稱列表?例如:
fns = ['function1', 'function2']
for fn in fns:
fn()
我會如何正確執行上述操作?
不使用字符串列表,只是存儲在列表中的功能:
fns = [function1, function2]
for fn in fns:
fn()
您可以從globals()
命名空間訪問函數對象,但請注意,這不是一種常規方法,因爲首先導入的對象應該是可調用的(具有__call__
屬性),它們應該存在於全局名稱空間中。
for fn in fns:
try:
globals()[fn]()
except KeyError:
raise Exception("The name {} is not in global namespace".format(fn))
例子:
>>> from itertools import combinations, permutations
>>>
>>> l = ['combinations', 'permutations']
>>> for i in l:
... print(list(globals()[i]([1, 2, 3], 2)))
...
[(1, 2), (1, 3), (2, 3)]
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
我不推薦在生產代碼中使用自檢工具,但在很多情況下,這不一定像預期的那樣工作,比如嘗試導入模塊本身不起作用:'import math l globals()[「math .sqrt「](4)' –
@ TadhgMcDonald-Jensen事實上,我正在更新答案。 – Kasramvd
這是正確的答案。 –