在Python中初始化字符串变量:""还是None?
假设我有一个类里面有一个字符串的实例属性。那我应该用""(空字符串)来初始化这个属性,还是用None(空值)呢?这两种方式都可以吗?
def __init__(self, mystr="")
self.mystr = mystr
或者
def __init__(self, mystr=None)
self.mystr = mystr
编辑: 我之前想的是,如果我用""作为初始值,那我就是在“声明”这个变量是字符串类型。这样的话,我以后就不能把其他类型的值赋给它了。我这样理解对吗?
编辑: 我觉得这里需要说明的是,我之前的想法是错的。其实把其他类型的值赋给一个变量是没有问题的。我很喜欢S.Lott的一条评论:“因为在Python中没有什么是‘声明’的,所以你并不是在正确的思考方式。”
11 个回答
15
None表示“没有设置”,而其他任何值则表示一个“默认值”。
所以,如果你的类可以处理空字符串,并且你希望空字符串作为默认值,就用""。如果你的类需要检查这个变量是否被设置过,就用None。
注意,变量一开始是不是字符串并不重要。你可以在任何时候把它改成其他类型或值。
17
初始化一个空字符串的另一种方法是使用内置的 str()
函数,而且不需要传入任何参数。
str(object='')
这个函数会返回一个字符串,里面包含了一个对象的可打印表示。
...
如果不传入任何参数,它会返回一个空字符串,''。
在最初的例子中,这样写会是:
def __init__(self, mystr=str())
self.mystr = mystr
我个人认为,这种方式更能表达你的意图。
顺便提一下,str()
函数本身就设置了一个默认的参数值为 ''
。
96
如果在你的程序中没有值是有意义的(比如说一个可选的值),那么你应该使用 None。这就是它的用途。
如果这个值必须由调用 __init__ 的人提供,我建议你不要给它初始化。
如果空字符串 "" 作为默认值是合理的,那就可以使用它。
在 Python 中,类型是根据使用情况来推断的。因此,你可以通过简单地赋值一个不同类型的值来改变类型。
>>> x = None
>>> print type(x)
<type 'NoneType'>
>>> x = "text"
>>> print type(x)
<type 'str'>
>>> x = 42
>>> print type(x)
<type 'int'>