求教python有没有一种方法可以输入函数名调用函数的

sky320 2015-01-04 06:38:48
说通俗点就是调用函数的函数。
比如说我有一个函数:
def func1(x,y):
return x+y

那现在我通过一个函数xxx("func1",5,10)调用这个fun1并传入x和y的值,从而xxx()函数返回func1函数的值。
不知道这种类似的方法在python是否有呢,我在au3看过这样的函数,所以来请教各位高人。。多谢。。。
...全文
332 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky320 2015-01-05
  • 打赏
  • 举报
回复
感谢楼上两位,受教啦!!!
panghuhu250 2015-01-04
  • 打赏
  • 举报
回复
引用 楼主 sky320 的回复:
说通俗点就是调用函数的函数。 比如说我有一个函数: def func1(x,y): return x+y 那现在我通过一个函数xxx("func1",5,10)调用这个fun1并传入x和y的值,从而xxx()函数返回func1函数的值。 不知道这种类似的方法在python是否有呢,我在au3看过这样的函数,所以来请教各位高人。。多谢。。。
python中函数也可以作为参数传递, 所以你可以直接传递函数, 而不是函数名.

In [350]: def f(x, y):
     ...:     return x+y
     ...: 

In [352]: def usefunc(func, x, y):
     ...:     return func(x, y)
     ...: 

In [353]: usefunc(f, 10, 20)
Out[353]: 30

In [354]: def g(x, y):
     ...:     return x*y
     ...: 

In [355]: usefunc(g, 10, 20)
Out[355]: 200
如果确实需要用函数名(字符串)来确定函数, 最好的办法是自己建一个字典, 来保存允许用户使用的函数名, 例如

functions = {'double': lambda x: x*2, "triple": lambda x: x*3}

eval是很危险的办法, 尤其是函数名是由你无法控制的用户输入时.
DarkChampion 2015-01-04
  • 打赏
  • 举报
回复
不好意思,写错了,重写一个
def xxx(z, x, y):
    ff=eval(z)
    return ff(x,y)
DarkChampion 2015-01-04
  • 打赏
  • 举报
回复
def xxx(f, x, y):
	return eval(f+"("+str(x)+", "+str(y)+")")
DarkChampion 2015-01-04
  • 打赏
  • 举报
回复
eval就可以

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧