cmp 根据评估方法返回两个不同的结果
cmp is returning two different results based on evaluation method
因此,我尝试练习将函数和关键字作为参数传递给 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
为什么不一样? myeval 不应该也 return -1 吗?评估的幕后是否发生了一些奇怪的事情?
你需要做 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
。
因此,我尝试练习将函数和关键字作为参数传递给 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
为什么不一样? myeval 不应该也 return -1 吗?评估的幕后是否发生了一些奇怪的事情?
你需要做 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
。