@ 基本類型
- mutable: dict, list
- inmutable: number, tuple, string
>>> type(1)
<class 'int'>
>>> type(1.2)
<class 'float'>
>>> type([1])
<class 'list'>
>>> type((1,))
<class 'tuple'>
>>> isinstance(1,int)
True
>>> isinstance(1,float)
False
>>> type({1,'a'})
<class 'set'>
>>> type({1:'a'})
<class 'dict'>
>>>
@異常處理
>>> try:
... 1/0
... except Exception as e:
... print(e)
... else:
... pass
... finally:
... print('end')
...
division by zero
end
>>>
@快速排序
@字典推導(dǎo)式
>>> {k: v for (k,v) in enumerate([1,2,3])}
{0: 1, 1: 2, 2: 3}
@字符串格式化
% 和 format
>>> "fadf%d%s" %(1,'a')
'fadf1a'
>>> "fadf{}{}".format(1,'a')
'fadf1a'
@迭代器和生成器
- 生成器
>>> l=[x*x for x in range(2)]
>>> l
[0, 1]
>>> g=(x*x for x in range(2)) # generator
>>> g
<generator object <genexpr> at 0x1038f69b0>
>>> next(g) # next下一個值
0
>>> next(g)
1
>>> next(g) # 直到拋出StopIteration
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> for i in (x*x for x in range(2)): # generator是可迭代對象
... print(i)
...
0
1
>>> hasattr(g,'__iter__')
True
- 迭代器
可迭代對象(iterable):list, dict, str, generator, tuple
>>> from collections import Iterable # 使用isinstance判斷是否是iterable(可迭代對象,可以用于for循環(huán))
>>> isinstance([],Iterable) # list
True
>>> isinstance({},Iterable) # dict
True
>>> isinstance('abc',Iterable) # str
True
>>> isinstance((x for x in range(2)), Iterable) # generator
True
>>> isinstance((1,), Iterable) # tuple
True
>>> isinstance(11, Iterable) # int
False
iterator:
可以被next()函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器(Iterator)
# 生成器都是Iterator對象,但list、dict、str雖然是Iterable,卻不是Iterator。
>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False
# 把list、dict、str等Iterable變成Iterator可以使用iter()函數(shù):
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
>>> t='abc'
>>> next(t)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: str object is not an iterator
>>> t=iter(t)
>>> next(t)
'a'
>>> next(t)
'b'
>>>
小結(jié)
- 凡是可作用于for循環(huán)的對象都是Iterable類型;
- 凡是可作用于next()函數(shù)的對象都是Iterator類型,它們表示一個惰性計(jì)算的序列;
- 集合數(shù)據(jù)類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數(shù)獲得一個Iterator對象。
- Python的for循環(huán)本質(zhì)上就是通過不斷調(diào)用next()函數(shù)實(shí)現(xiàn)的
@遍歷
>>> d={'a':1,'b':2,'c':3}
>>> for i in d: # 直接遍歷字典,遍歷的是key
... print(i)
...
a
c
b
>>> for k,v in d.items(): # 使用items()遍歷鍵值對
... print('{}->{}'.format(k,v))
...
a->1
c->3
b->2
>>> for i in [1,2]: # 遍歷列表
... print(i)
...
1
2
>>> for index,value in enumerate([1,2]): #遍歷列表(帶索引)
... print('{}->{}'.format(index,value))
...
0->1
1->2
@copy()和deepcopy()
pass
@讀寫文件
read,readline和readlines
- read 讀取整個文件
- readline 讀取下一行,使用生成器方法
- readlines 讀取整個文件到一個迭代器以供我們遍歷