Python,带有lambda的映射仅返回我list()上的无对象

时间:2018-07-16 20:11:32

标签: python function oop lambda

我有该代码:

    class Welcome(object):
        MyHouse='Earth'
        def say(self, what):
            print(what, self.MyHouse)

    welcome = Welcome()

    Living = ['World', 'Planet', welcome.MyHouse]

    MyChoice = list(map(lambda choice : setattr(welcome, 'MyHouse', choice), Living))
    print(''.join(str(MyChoice) for MyChoice in MyChoice))
    getattr(welcome, 'say')('Hello')

使用此代码,我想使用setattr()根据Living列表中包含的字符串更改MyHouse变量,但是当我看到结果时,我只会得到None对象?为什么这样做以及如何解决它,这是因为setattr不提供输出?。

    print(MyChoice) 
    Output: [None, None, None] 

1 个答案:

答案 0 :(得分:0)

所以,我喝完咖啡后设法解决了 我只需要使用一个for循环 尽管我不知道执行此操作的确切原因,并且想解释一下,但我只是认为map()消除了for循环的需要。 这是代码:

    class Welcome(object):
        MyHouse='Earth'
        def say(self, what):
            print(what, self.MyHouse)

    welcome = Welcome()

    Living = ['World', 'Planet', welcome.MyHouse]

    MyChoice = map(lambda choice : setattr(welcome, 'MyHouse', choice), Living)
    for i in MyChoice:
        getattr(welcome, 'say')('Hello')

如果我需要一个for循环,为什么要使用lambda和map,那是没用的代码。