假设我有一个包含一些字符串变量的类,我想声明一个is_valid
方法,检查所有字符串变量都不是None
/ empty
看起来像这样:
class MyClass(object):
var1 = None
var2 = None
var3 = None
@property
def is_valid(self):
return self.var1 and self.var2 and self.var3
根据我的理解,这是检查所有值都已设置的 pythonic 方法。
现在,如果var1..3
要保留一些非常长的字符串值,is_valid
将返回其中的最后一个,在本例中为var3
的值。如果我没错,python中的字符串是不可变的,因此会返回字符串的副本,从而使应用程序消耗更多内存。
它被认为是实施is_valid
的更好解决方案:
@property
def is_valid(self):
return self.var1 and self.var2 and self.var3 and True
或者我在这里遗漏了什么?
答案 0 :(得分:12)
...将返回该字符串的副本......
不正确的。将返回对字符串对象的引用。但您可以致电bool()
将其转换为“更好”的值。
return bool(var1 and var2 and var3)
答案 1 :(得分:6)
返回一个对象总是在Python中返回对该对象的引用,无论它是否是不可变的。而不变性至多是制作副本的理由;例如tuple(another_tuple)
只返回another_tuple
,而list(another_list)
则返回another_list
的副本。对于不可变对象,没有理由进行复制。