为什么 = 1与 ='1'有根本的不同?

请考虑两个代码片段(注意string和整数之间的区别):

a = [] a[:] = '1' 

 a = [] a[:] = 1 

在第一种情况下, a['1'] 。 在第二个,我得到错误TypeError: can only assign an iterable 。 为什么在这里使用'1'会有根本的不同?

分配给一个片需要在右边迭代。

'1'是可迭代的,而1不是。 考虑以下:

 In [7]: a=[] In [8]: a[:]='abc' 

结果是:

 In [9]: a Out[9]: ['a', 'b', 'c'] 

正如你所看到的,列表将string的每个字符作为一个单独的项目。 这是迭代string产生其字符的事实的结果。

如果你想用一个标量来replace一个元素的范围,只需简单地将标量包装在一个可迭代的类中:

 In [11]: a[:]=(1,) # single-element tuple In [12]: a Out[12]: [1] 

这也适用于string(假设string被视为单个项目而不是字符序列):

 In [17]: a[:]=('abc',) In [18]: a Out[18]: ['abc'] 

'1'是一个string,但它是可迭代的。 这就像一个字符列表。 a[:]='1'用string'1'的内容replace列表a的内容。 但1是一个整数。

Python不会改变types。

例:

 print bool(1=='1') # --> False