Python 调用X函数的函数

Python 调用X函数的函数,python,Python,我想基本上把一个列表元素变成一个函数 do函数。这样,我只需使用 do(列表[x]) 我试图做的是一个函数,它去掉列表元素的引号,然后执行该列表元素中的函数 编辑: 我想做的是一个函数,它去掉了 元素,然后执行该列表中的函数 元素 嗯,它基本上是这样工作的。请注意,列表包含函数本身,而不是字符串 def func(): print "python" def func1(): print "is" def func2(): print "awesome" def d

我想基本上把一个列表元素变成一个函数 do函数。这样,我只需使用 do(列表[x])

我试图做的是一个函数,它去掉列表元素的引号,然后执行该列表元素中的函数



编辑:

我想做的是一个函数,它去掉了 元素,然后执行该列表中的函数 元素


嗯,它基本上是这样工作的。请注意,列表包含函数本身,而不是字符串

def func():
   print "python"

def func1():
    print "is"

def func2():
    print "awesome"

def do(fun):
    fun()

funcs = [func, func1, func2]

for function in funcs:
    do(function)
输出:

python
is
awesome
编辑:如果希望列表中包含函数名作为字符串,请使用
eval()


您不需要额外的函数,也不需要将它们转换为字符串:

def func():
    print "python"

def func1():
     print "is"

def func2():
     print "awesome"

funcs = [func, func1, func2]

for function in funcs:
    function()
如果您确实希望从当前全局/模块范围内的名称列表中执行任意命名的函数,则可以执行以下操作:

NB:这不会使用潜在的不安全和危险的
eval()

示例:

def func():
    return "python"


def func1():
    return "is"


def func2():
    return "awesome"


def do(func_name, *args, **kwargs):
    f = globals().get(func_name, lambda : None)
    if callable(f):
        return f(*args, **kwargs)


funs = ["func", "func1", "func2"]

print "".join(funs[0])
print "".join(map(do, funs))
$ python foo.py
func
pythonisawesome
输出:

def func():
    return "python"


def func1():
    return "is"


def func2():
    return "awesome"


def do(func_name, *args, **kwargs):
    f = globals().get(func_name, lambda : None)
    if callable(f):
        return f(*args, **kwargs)


funs = ["func", "func1", "func2"]

print "".join(funs[0])
print "".join(map(do, funs))
$ python foo.py
func
pythonisawesome
您还可以单独调用“命名”函数:

>>> do(funs[0])
python

注意
do()
的实现。这也可以更一般地应用于对象和其他模块,也可以调出
globals()
查找。

正如上面的人所说,最好的方法是定义函数字典,因为函数在python中是对象,这是可能的

def One():
   pass
def Two():
   pass
functions = {"ONE":One, "TWO":Two}
你可以这样称呼它:

functions[input]()
如果你想给用户真正的控制权(我不建议这样做),你可以使用eval函数

eval(input+"()")

为什么要将字符串而不是函数放入列表中?而
do(funs[x])
而不仅仅是
funs[x]()
的意义是什么?因为我想稍后将它们转换为函数。如果我将它们作为函数保留,它们将全部运行(我不希望这样),然后变为无。如果您这样做,它们将不会运行,例如
funs=[func,…]
(将函数放在列表中),而不是
funs=[func(),…]
(将调用函数的结果放在列表中)。酷!,但是如果他们有参数会发生什么呢?你会怎么做?参数也需要存储吗?如果是,请查看
lambda
functools.partial
。如果没有,只要在调用函数时传递它们,就像使用函数名(
funs[x](foo,bar)
)一样。不需要自定义的
do
方法,只需使用python的
apply
就可以了,根本不需要单独的函数<代码>函数()是你应该做的;我的回答是你的编辑(但没有使用
eval()
):我永远不会提倡使用
eval()
eval()
在这里真的很奇怪。即使是通过
getattribute
查找方法也会更好。@JamesMills:eval偶尔也有很好的用途。99%的情况下,尤其是对于新手来说,
eval
看起来很好的用途实际上是对高阶编程(如本例)或使用真实的数据格式和解析器的很好的用途,或者……但如果它真的是正确的,使用
eval
肯定比使用与
eval
相同的安全漏洞/调试问题/性能问题的笨拙解决方案要好……那么
*args
有什么好处吗?我是说,你是在毫无争议的情况下说的。你能单独说吗?e、 g只是打印python?@CarlTheodooroposthumasolis:是的<代码>do(funs[0])