Python3学习笔记 | 十、Python的类型与运算-其他

  • 2019 年 10 月 6 日
  • 筆記

一、内容分类

二、set

1、集合

集合的元素可以是不可变对象:数字、字符串、元祖、frozenset。集合里的元素是不重复的。

空集合:

>>> dora = set()  >>> type(dora)  <class 'set'>

Python 2.x 里现实方式是set(列表)方式。

>>> dora  set([])

Python 3.x 里,空的时候是set(),有元素跟字典差不多,但不是键:值方式。

>>> dora  set()  >>> dora = {'Emon'}  >>> dora  {'Emon'}

2、集合的方法

三、bytearray 类型

在Python2.x里默认字符串可以认为是在python3.x里的byte类型,在python3.x里默认类型是unicode。字符串类型是不可变的,但在python3.x里支持可变字符串:bytearray类型。

>>> a = bytearray('你好',encoding='utf-8')  bytearray(b'xe5xbdxa0xe5xa5xbd')  >>> a[0]  228  >>> a[0]=229  >>> a.decode('utf-8')  '彠好'  >>> a.find('好'.encode('utf-8'))  3

四、对象灵活性

像列表,字典,元祖里的元素可以包涵任何对象,可以任意嵌套。列表和字典是任意变长的。 比如:一个列表如下:

>>> List1  [{'dict': ['dict1', 'dict2']}, 'List2', (['list3-1', 'list3-2'], 'list3-3'), ['list4']]

五、引用与复制

>>> a = [1,2,3]  >>> b = ['a',a,'b']  >>> b  ['a', [1, 2, 3], 'b']  >>> a[0] = 4  >>> a  [4, 2, 3]  >>> b  ['a', [4, 2, 3], 'b']

这个时候发现,结果可能与想象的不一样。当我们需要的是复制a的值而不是引用:

>>> a = [1,2,3]  >>> b = ['a',a,'b']  >>> c=['a',a[:],'b']  >>> a[0] = 4  >>> a  [4, 2, 3]  >>> b  ['a', [4, 2, 3], 'b']  >>> c  ['a', [1, 2, 3], 'b']

具体原理图如下:

六、比较 - 内容相等,对象相等

>>> a = 1  >>> b = 1  >>> a == b  True  >>> a is b  True  >>> a = [1,2,3]  >>> b = [1,2,3]  >>> a == b  True  >>> a is b  False

创建列表,字典,元组等有多个元素的对象的时候,不会在原有对象里查找想等的,而是新创建一个,字符串有点特殊。

七、Python中的真假

数字:非0为真,0为假

其它对象:非空为真,空为假

None 为假,关于None,在Python里是独立的对象类型,只有一个值。

bool类型:

>>> bool()  False  >>> bool(1)  True  >>> bool({})  False

八、无限循环

>>> a = {'d':''}  #字典  >>> a['d'] = a  >>> a  {'d': {...}}  >>> a['d']['d']['d']  {'d': {...}}    >>> l = ['L']  #列表  >>> l.append(l)  >>> l  ['L', [...]]  >>> l[1][1][1]  ['L', [...]]