lambda 表达式的包装器

发布于 2024-09-17 20:05:55 字数 469 浏览 3 评论 0原文

我在 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 is an argument to一个 lambda 表达式,那么为什么必须定义它呢?

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

I have functions in python that take two inputs, do some manipulations, and return two outputs. I would like to rearrange the output arguments, so I wrote a wrapper function around the original function that creates a new function with the new output order

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)

However, this is giving an error message:

NameError: global name 'x' is not defined

x is an argument to a lambda expression, so why does it have to be defined?

The expected behavior is that h should be a new function that is identical to lambda x,y: (-x,-y)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

够钟 2024-09-24 20:05:55

您需要在 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 元组。

You need to add parentheses around the lambda expression:

h = lambda x,y: (-f(x,y)[1], f(x,y)[0])

Otherwise, Python interprets the code as:

h = (lambda x,y: -f(x,y)[1]), f(x,y)[0]

and h is a 2-tuple.

被翻牌 2024-09-24 20:05:55

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

def rotate(f):
    h = lambda x,y: (-f(x,y)[1], f(x,y)[0])
    return h

There is problem with precedence. Just use additional parentheses:

def rotate(f):
    h = lambda x,y: (-f(x,y)[1], f(x,y)[0])
    return h
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文