在Python中初始化一个字符串变量:""或None?

leg*_*esh 64 python

假设我有一个带有字符串实例属性的类.我应该使用""值或" "初始化此属性吗?好吗?

def __init__(self, mystr="")
   self.mystr = mystr
Run Code Online (Sandbox Code Playgroud)

要么

def __init__(self, mystr=None)
   self.mystr = mystr
Run Code Online (Sandbox Code Playgroud)

编辑:我认为如果我使用""作为初始值,我" 声明 "变量是字符串类型.然后我将无法再为其分配任何其他类型.我对吗?

编辑:我认为这里需要注意的是,我的建议是错误的.将另一种类型分配给变量没有问题.我喜欢S.Lott的评论:" 因为Python中的任何内容都没有被宣布",所以你并没有考虑到这一点. "

wie*_*rob 71

如果没有值在程序中有意义(例如可选值),则应使用None.无论如何,这都是它的目的.

如果该值必须由__init__的调用者提供,我建议不要初始化它.

如果""作为默认值有意义,请使用它.

在Python中,类型是从用法中推导出来的.因此,您可以通过仅指定另一种类型的值来更改类型.

>>> x = None
>>> print type(x)
<type 'NoneType'>
>>> x = "text"
>>> print type(x)
<type 'str'>
>>> x = 42
>>> print type(x)
<type 'int'>
Run Code Online (Sandbox Code Playgroud)

  • +1:无或"""*的含义是什么?设计选择完全取决于哪个值更有意义. (4认同)

Pau*_*aul 12

None用于表示"未设置",而任何其他值用于表示"默认"值.

因此,如果您的类处理空字符串并且您希望它作为默认值,请使用"".如果您的类需要检查变量是否已设置,请使用None.

请注意,如果您的变量最初是一个字符串并不重要.您可以在任何其他时刻将其更改为任何其他类型/值.


Ste*_*ens 11

初始化空字符串的另一种方法是使用str()不带参数的内置函数.

STR(对象= '')

返回一个包含对象的可打印表示的字符串.

...

如果没有给出参数,则返回空字符串''.

在原始示例中,它将如下所示:

def __init__(self, mystr=str())
   self.mystr = mystr
Run Code Online (Sandbox Code Playgroud)

就个人而言,我相信这更好地传达了你的意图.

请注意,它str()本身设置的默认参数值为''.


Ikk*_*kke 5

这取决于.如果要区分根本没有传入的参数和传入的空字符串,可以使用None.


Pau*_*gar 5

要么可能没事,但我认为没有明确的答案.

  • 如果要表明尚未设置该值,则比较比较None"",因为""可能是有效值,
  • 如果你只想要一个默认值,""可能更好,因为它实际上是一个字符串,你可以调用它的字符串方法.如果你去了None,这些将导致例外.
  • 如果您希望向未来的维护者表明此处需要字符串,""可以提供帮助.

完整的旁注:

如果你有一个循环,说:

def myfunc (self, mystr = ""):
    for other in self.strs:
        mystr = self.otherfunc (mystr, other)
Run Code Online (Sandbox Code Playgroud)

然后潜在的未来优化器会知道它str总是一个字符串.如果你使用过None,那么在第一次迭代之前它可能不是一个字符串,这需要循环展开以获得相同的效果.虽然这不是一个假设(它在我的PHP编译器中出现了很多),但你绝对不应该编写代码来考虑这一点.我只是觉得它可能很有趣:)