【发布时间】:2016-05-28 23:41:34
【问题描述】:
在 Python(更具体地说是 Python 3.x)中,如果我说 x = x 会发生什么,其中 x 是对可变的引用(如 list)或对不可变的引用(如 @987654324 @) 在低级别?编译器会直接忽略这些废话吗?
更具体地说,如果我们遇到以下情况,编译器会做什么:
class A:
def __init__(self):
self.a = self.init_a()
def init_a(self):
self.a = some_value
"""
do stuff with self.a here
"""
return self.a
对于那些没有注意到的人,self.a 实际上是通过函数init_a(self) 分配给自己的。
我知道上面class A 的这种情况似乎很愚蠢,但我试图通过在__init__(self) 函数中清楚地初始化我的所有成员变量来保持我的代码清洁和可读性(在我正在实现的另一个类中) )。我只是想知道编译器是否优化了该步骤,或者它是否在任何情况下都进行了一些操作,即使该语句没有产生任何结果(我猜它被优化了,但我想成为当然 - 你永远不知道)。
【问题讨论】:
-
您应该在
init_a中将其称为a,并且仅将其附加到__init__中的self。否则,您将违背您的目标或“在__init__(self)函数中清楚地初始化我的所有成员变量”。 -
是的,这可能是一个更好的主意,但无论如何我都想知道上面的情况
标签: python reference compilation