我在python中有函数,它接受两个输入,做一些操作,然后返回两个输出。我想重新排列输出参数,所以我在原始函数周围写了一个包装函数,用新的输出顺序创建一个新函数
def rotate(f):
h = lambda x,y: -f(x,y)[1], f(x,y)[0]
return h
f = lambda x, y: (-y, x)
h = rotate(f)
但是,这会给出错误消息:
NameError: global name 'x' is not defined
x
是lambda表达式的参数,为什么必须定义它?
预期的行为是h
应该是与lambda x,y: (-x,-y)
相同的新功能
答案 0 :(得分:7)
您需要在lambda表达式周围添加括号:
h = lambda x,y: (-f(x,y)[1], f(x,y)[0])
否则,Python将代码解释为:
h = (lambda x,y: -f(x,y)[1]), f(x,y)[0]
和h
是一个2元组。
答案 1 :(得分:5)
优先顺序有问题。只需使用额外的括号:
def rotate(f):
h = lambda x,y: (-f(x,y)[1], f(x,y)[0])
return h