所以我试图让一些练习在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也不应该返回-1吗?评估的幕后是否有一些奇怪的事情发生?
答案 0 :(得分:4)
您需要 AnswersByPartner
==================================================
Name | "What is 3 x 23?" | "Your age?"
==================================================
"Jason" | 69 | 26
--------------------------------------------------
"Subhasish" | NULL | 45
。
由于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
。