为什么 = 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