在 lambda 表达式中使用变量的值

发布于 2024-07-17 04:35:15 字数 391 浏览 2 评论 0原文

a = [] a.append(lambda x:x**0) 
a.append(lambda x:x**1)

a[0](2), a[1](2), a[2](2)... spits out 1, 2, 4, ...

b=[]
for i in range(4)
    b.append(lambda x:x**i)

b[0](2), b[1](2), b[2](2)... spits out 8, 8, 8, ...

在 for 循环中,i 作为变量传递给 lambda,因此当我调用它时,使用 i 的最后一个值,而不是像 a[] 那样运行代码。 (即 b[0] 应该使用 x^1,b[1] 应该使用 x^2,...)

我怎样才能告诉 lambda 获取 i 的值而不是变量 i 本身。

a = [] a.append(lambda x:x**0) 
a.append(lambda x:x**1)

a[0](2), a[1](2), a[2](2)... spits out 1, 2, 4, ...

b=[]
for i in range(4)
    b.append(lambda x:x**i)

b[0](2), b[1](2), b[2](2)... spits out 8, 8, 8, ...

In the for loop, the i is being passed to lambda as a variable, so when I call it, the last value of i is used instead of the code running as it does with a[]. (ie b[0] should use x^1, b[1] should use x^2, ...)

How can I tell lambda to pick up the value of i instead of the variable i itself.

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

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

发布评论

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

评论(3

飘落散花 2024-07-24 04:35:15

丑陋,但一种方式:

for i in range(4)
    b.append(lambda x, copy=i: x**copy)

您可能更喜欢

def raiser(power):
    return lambda x: x**power

for i in range(4)
    b.append(raiser(i))

(所有代码未经测试。)

Ugly, but one way:

for i in range(4)
    b.append(lambda x, copy=i: x**copy)

You might prefer

def raiser(power):
    return lambda x: x**power

for i in range(4)
    b.append(raiser(i))

(All code untested.)

饭团 2024-07-24 04:35:15

定义一个工厂

def power_function_factory(value):
    def new_power_function(base):
        return base ** value
    return new_power_function

b = []
for i in range(4):
    b.append(power_function_factory(i))

b = [power_function_factory(i) for i in range(4)]

Define a factory

def power_function_factory(value):
    def new_power_function(base):
        return base ** value
    return new_power_function

b = []
for i in range(4):
    b.append(power_function_factory(i))

or

b = [power_function_factory(i) for i in range(4)]
や三分注定 2024-07-24 04:35:15
b=[]
f=(lambda p:(lambda x:x**p))
for i in range(4):
   b.append(f(i))
for g in b:
   print g(2)
b=[]
f=(lambda p:(lambda x:x**p))
for i in range(4):
   b.append(f(i))
for g in b:
   print g(2)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文