3.23筆記(python基礎)

X__發表於2019-03-23

一.迭代器與生成器

直接作用於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
複製程式碼

相關文章