Python 使用前定义空列表并将其分配给变量 s=“文本” parts=[]#

Python 使用前定义空列表并将其分配给变量 s=“文本” parts=[]#,python,Python,如果查看代码的第二部分,您会发现正在发生的赋值是 s = "text" parts = [] # <<< why not just parts = 0 print id(parts) # 3074379948 parts = s.split() print id(parts) # 3074380332 在上面,部分应该是一个列表,因为它是.split的输出。因此,为了保持程序的一致性,用类似于parts=[]的值实例化它是合乎逻辑的 设想一个场景,其中第二部分失败(示例代

如果查看代码的第二部分,您会发现正在发生的赋值是

s = "text"
parts = [] # <<< why not just parts = 0
print id(parts) # 3074379948

parts = s.split()
print id(parts) # 3074380332
在上面,
部分
应该是一个
列表
,因为它是
.split
的输出。因此,为了保持程序的一致性,用类似于
parts=[]
的值实例化它是合乎逻辑的


设想一个场景,其中第二部分失败(示例代码),并且您仍然希望使用
部分做一些事情。如果您用任何其他值实例化它,您的代码在逻辑上就会变得不一致,并且可能会抛出错误。如果您执行了下面的
parts=0
,那么从那时起,parts就不会是可移植的,依此类推:

parts = s.split()
print id(parts) # 3074380332

代码正在设置一个默认值,其中
parts
值应始终为列表对象

可能并非总是到达
parts=s.split()
行,但始终使用
parts
变量,并期望它是一个列表。如果存在
if
语句或
try


然后设置
parts=0
是没有意义的,因为整数不是同一类型的对象。如果总是执行
s.split()
,您可以完全省略
parts=[]
行,它就是多余的。

我认为
parts=[]
parts=0
好。它显示了
零件
是一个列表,即使它是稍后重新定义为不同列表的列表。首先使用
parts=0
只会增加额外的混乱,因为类型将被更改。如果s.split()在
中引发异常,则可能会有问题。最后
例程
parts始终是定义的,并且始终是“正确”类型。在您的代码片段中-它没有任何意义。
parts = [] # works
# parts = 0 # doesn't work
try:
    s = 0
    parts = s.split()
except:
    pass
for part in parts:
    print part