相关疑难解决方法(0)

Python lambda不记得for循环中的参数

可能重复:
使用lambda表达式中的变量值

我正在使用python并尝试隔离我使用lambda函数的问题.

从下面的代码我期望创建两个lambda函数,每个函数得到一个不同的x,输出应该是
1 2

但输出是2 2

为什么?我怎样才能创造两种不同的功能?使用def?

def main():
    d = {}
    for x in [1,2]:
        d[x] = lambda : print(x)

    d[1]()
    d[2]()


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

python lambda for-loop

6
推荐指数
3
解决办法
1434
查看次数

lambda中的变量范围

为什么这段代码打印"d,d,d,d",而不是"a,b,c,d"?如何修改它以打印"a,b,c,d"?

cons = []
for i in ['a', 'b', 'c', 'd']: 
    cons.append(lambda: i)  
print ', '.join([fn() for fn in cons])      
Run Code Online (Sandbox Code Playgroud)

python scope

5
推荐指数
1
解决办法
249
查看次数

python:(lambda)函数的dict

将lambda函数存储到字典中时,我遇到了一些奇怪的行为:如果尝试将某个默认值传递给循环中的函数,则只使用最后一个默认值.

这是一些最小的例子:

#!/usr/bin/env python
# coding: utf-8

def myfct(one_value, another_value):
    "do something with two int values"
    return one_value + another_value

fct_dict = {'add_{}'.format(number): (lambda x: myfct(x, number))
            for number in range(10)}

print('add_3(1): {}, id={}'.format(fct_dict['add_3'](1), id(fct_dict['add_3'])))
print('add_5(1): {}, id={}'.format(fct_dict['add_5'](1), id(fct_dict['add_5'])))
print('add_9(1): {}, id={}'.format(fct_dict['add_9'](1), id(fct_dict['add_9'])))
Run Code Online (Sandbox Code Playgroud)

输出如下

add_3(1): 10, id=140421083875280
add_5(1): 10, id=140421083875520
add_9(1): 10, id=140421083876000
Run Code Online (Sandbox Code Playgroud)

你得到不同的函数(id不相同),但每个函数使用相同的第二个参数.

有人能解释一下发生了什么吗?

python2,python3,pypy也是如此......

python lambda

5
推荐指数
1
解决办法
4503
查看次数

带有 Lambda 值的字典更新所有条目

我在 Python 2.7 中。我有两个类和一个命名元组。一个类包含一个字典作为实例属性和一个分配给该字典的函数。(这是情况的一个非常简化的版本)。namedtuple 很简单。另一个类是test_dict通过add_to_test_dict函数调用向其中添加条目的类。

然后我实例化 DictManipulator 并调用test函数:

from collections import namedtuple


class DictHolder(object):
    def __init__(self):
        self.test_dict = {}
    def add_to_test_dict(self, key, val):
        self.test_dict[key] = val

TestTuple = namedtuple('TestTuple', 'name data')

class DictManipulator(object):
    def test(self):
        named_tuple_list = [TestTuple(name='key1', data=1), TestTuple(name='key2', data=1000)]
        self.my_dh = DictHolder()
        for item in named_tuple_list:
            self.my_dh.add_to_test_dict(item.name, lambda: item.data)

my_dm = DictManipulator()
my_dm.test()
print('key1 value: ', my_dm.my_dh.test_dict['key1']())
print('key2 value: ', my_dm.my_dh.test_dict['key2']())
# ('key1 value: ', 1000)
# ('key2 value: ', 1000)
Run Code Online (Sandbox Code Playgroud)

为什么两个键在那里返回相同的值?我已经进行了足够的实验,可以说原始的 …

python lambda namedtuple python-2.7

3
推荐指数
1
解决办法
288
查看次数

标签 统计

python ×4

lambda ×3

for-loop ×1

namedtuple ×1

python-2.7 ×1

scope ×1