python中的高階特性
阿新 • • 發佈:2019-01-25
迭代
迭代可以對list,tuple和str等型別的資料進行操作,如何判斷一個數據是否可以迭代:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整數是否可迭代
False
list中如何實現如Java一樣的下標:使用Python中的內建enumerate函式:
列表生成式a = [1,2,3] b = ['a','b','c'] c = 'ABC' for i , value in enumerate(a): print(i,value) >>>0 1 >>>1 2 >>>2 3
帶if的列表生成式,在生成list時候,進行篩選:
>>>[x*x for i in range(1,11) if i%2 == 0]
[4,16,36,64,100]
對字串進行全排列:
>>>[m +n for m in 'ABC' for n in 'XYZ']
['AX','AY','AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
生成器為了不佔用很大的記憶體空間,在Python中,有種一邊迴圈一邊計算的機制,稱為生成器:generator
建立generator,只需把列表生成器的[]改為()即可:
使用for迴圈也可以將g全部輸出:g = ( x*x for x in range(10)) next(g) >>>0 next(g) >>>1 ...
for n in g:
print(n)
>>>0
1
4
9
16
25
36
49
64
81
另一種定義生成器的方法就是:函式中的yield關鍵字,該函式為一個generator。則在執行過程中遇到yield就進行返回。
但是不能輸出返回語句,如果想要拿到返回值,必須捕獲def test(): print("step1:") yield 'a' print("step2:") yield 'b' print("step3:") yield 'c' print("step4:") yield 'd' return 'over' for x in test(): print(x) >>>step1: a step2: b step3: c step4: d
StopIteration
錯誤,返回值包含在StopIteration
的value
中,需進行改寫:
x = test()
while 1:
try:
print(next(x))
except StopIteration as e:
print(e.value)
break
>>>
step1:
a
step2:
b
step3:
c
step4:
d
over
【注】最後的break如果忘記的話會形成死迴圈!!!