一.迭代器與生成器
直接作用於for迴圈的物件稱為可迭代物件(Iterable):
判斷:isinstance()
>>> from collections import Iterable
>>> isinstance([], Iterable) #list
True
>>> isinstance({}, Iterable) #dict
True
>>> isinstance('abc', Iterable) #字串
True
>>> isinstance((x for x in range(10)), Iterable) #生成器
True
>>> isinstance(100, Iterable) #整數
False
複製程式碼
可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器:Iterator
生成器是返回迭代器的函式
生成器都是Iterator物件,但list、dict、str雖然是Iterable,卻不是Iterator。
把list、dict、str等Iterable變成Iterator可以使用iter()函式:
二.函數語言程式設計
變數可以指向函式
函式名也是變數
高階函式:一個函式就可以接收另一個函式作為引數
def add(x, y, f): #接收函式f
return f(x) + f(y)
複製程式碼
map函式(接收函式和iterable):將傳入的函式依次作用到序列的每個元素
reduce函式:把結果繼續和序列的下一個元素做累積計算
綜合運用:str轉int
>>> from functools import reduce
>>> def fn(x, y):
... return x * 10 + y
...
>>> def char2num(s):
... digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
... return digits[s]
...
>>> reduce(fn, map(char2num, '13579'))
13579
複製程式碼