繁体   English   中英

断言如何影响Python中的变量分配?

[英]How does assertion affect variable assignment in Python?

我在Python 2.7中遇到列表别名或变量赋值的问题。 我将向您展示一个简单的例子。 断言和没有断言两种不同的结果 ,我不知道断言为什么/如何影响这一点。

当我向如下所示的object_list添加内容时,它以某种方式覆盖了属性:

class Object1(object):                                                                                 

    def __init__(self):                                                                                    
        self.object_list = []  

    def add_thing(self, thing):                                                                                          
        # this next line makes all the difference
         assert thing.name not in [thing.name for thing in self.object_list], 'agent id already exists, use another one'
        self.object_list.append(thing)

class Thing(object):

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return self.name

这是一个最小的示例:

有了断言

mfd = Object1()
myAgent = Thing('blah')
myAgent_2 = Thing('blew')

mfd.add_thing(myAgent)
mfd.add_thing(myAgent_2)

print mfd.object_list

>> [blah, blah]

没有断言

mfd = Object1()
myAgent = Thing('blah')
myAgent_2 = Thing('blew')

mfd.add_thing(myAgent)
mfd.add_thing(myAgent_2)

print mfd.object_list

>> [blah, blew]

有人可以向我解释上面的断言如何影响这一点吗? 谢谢。

在python 2中,在列表理解范围内进行的隐式赋值泄漏到对调用者范围的理解之外。

因此,在你的榜样,通过执行断言, thing的价值变化和最终值thing是从最后一件事object_list 因此,如果没有assert ,您将添加与执行assert之后不同的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM