因此,我试图在python中练习将函数和关键字作为参数传递,并且得到了一个奇怪的结果。我有以下代码:
def myeval(f, *args, **kwargs):
return f(*args, **kwargs)
def tester(x = 0, y = 0):
return cmp(x,y)然后当我做一些测试时,奇怪的事情就会发生:
>>> cmp(1,10)
-1
>>> tester(1,10)
-1
>>> tester(x=1, y=10)
-1这是意料之中的。但是:
>>> myeval(tester, {"x":1, "y":10})
1为什么这不一样?我的血不也应该回来吗-1?在评估的幕后有什么奇怪的事情吗?
发布于 2016-02-23 17:48:02
你需要做myeval(tester, **{"x":1, "y":10})。
因为myeval(tester, {"x":1, "y":10})的结果是args是[{"x":1, "y":10}],而不是kwargs是所需的{"x":1, "y":10}。
或者将您的功能定义为:
def myeval(f, args, kwargs):然后称之为:
myeval(tester, [], {"x":1, "y":10})术语明智,你拥有的是一个apply,而不是一个eval。
https://stackoverflow.com/questions/35584523
复制相似问题