我在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)
您需要在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元组.
优先有问题.只需使用额外的括号:
def rotate(f):
h = lambda x,y: (-f(x,y)[1], f(x,y)[0])
return h
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
548 次 |
最近记录: |