围绕lambda表达式的包装

dzh*_*lil 3 python lambda

我在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)
Run Code Online (Sandbox Code Playgroud)

但是,这会给出一条错误消息:

NameError: global name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)

x 是lambda表达式的参数,为什么必须定义它?

预期的行为h应该是一个与之相同的新函数lambda x,y: (-x,-y)

Gre*_*ill 7

您需要在lambda表达式周围添加括号:

h = lambda x,y: (-f(x,y)[1], f(x,y)[0])
Run Code Online (Sandbox Code Playgroud)

否则,Python将代码解释为:

h = (lambda x,y: -f(x,y)[1]), f(x,y)[0]
Run Code Online (Sandbox Code Playgroud)

并且h是一个2元组.


Vad*_*der 5

优先有问题.只需使用额外的括号:

def rotate(f):
    h = lambda x,y: (-f(x,y)[1], f(x,y)[0])
    return h
Run Code Online (Sandbox Code Playgroud)