標籤:ict assm 方式 put 自己 map 多次 文檔 zip
函數是第一類對象:可以當做資料來傳
1. 可以被引用
2. 可以作為函數參數
3. 可以作為函數傳回值
4. 可以作為容器類型的元素
小例子:
def func1(): print(‘func1‘)def func2(): print(‘func2‘)dic = { ‘func1‘:func1, ‘func2‘:func2,}func = dic.get(‘func1‘)func()
名稱空間:名字與值的綁定關係,時刻記得左面有一根豎線,標識著範圍的不同
何時生效、何時失效,定義名字的方法
局部空間、全域名稱空間、內建名稱空間
範圍:用的時候,尋找的範圍
locals()
glocals(),系統變數__name__, __file__, __doc__
全域範圍:全域有效,在任何位置都可以被訪問到,除非被刪除,否則存活到檔案執行結束
局部範圍:局部有效,只能在函數內部被訪問,在函數執行結束後,就釋放了
閉包
1. 定義在函數內部的函數
2. 該內建函式包含對外部範圍而不是全域範圍的引用
def func1(): x = 1 def func2(): print(x) return func2func = func1()func()
特性:攜帶自己的範圍,先執行。包裹著一層
應用情境:爬蟲、裝飾器
裝飾器
開放封閉原則,對擴充開放,對修改封閉
什麼是裝飾器:
裝飾別的東西的工具:
裝飾器本身 ---> 任意可調用的對象,如函數
被裝飾對象 ---> 任意可調用的對象,如函數
裝飾器要遵循的原則
1. 不修改被裝飾對象的原始碼
2. 不修改被裝飾對象的調用方式
即定義和調用都不能修改
@deco # func = deco(func)def func(): pass@deco1@deco2 def func(): pass@deco(x) # 裝飾器也是函數,(),先調用,拿到結果@res在func的正上方def func(): pass
迭代器
迭代:重複上一次過程,每一次迭代都基於上一次執行地結果而繼續進行
如寫文檔,儲存,再修改
可迭代對象:obj.__iter__方法
可迭代對象 執行__iter__方法 ---> 迭代器
迭代器對象:
obj.__iter__方法
obj.__next__方法
為何要有迭代器:
提供一種不依賴於索引的迭代方式
如檔案、集合、字典都可以被迭代
# for 迴圈原理for i in obj: pass # 先執行,obj.__iter__方法,再next()
迭代器優缺點:
優點:
1. 提供一種不依賴於索引的迭代方式
2. 記憶體中只有一個值,節省記憶體
缺點:
1. 無法擷取長度
2. 一次性,只能前進,不能後退
產生器
函數體內含有yield關鍵字,那該函數的執行結果是產生器對象
產生器對象本質就是迭代器,所以yield的功能是
1. 把函數的執行結果做成迭代器
2. 可以返回多次值,而return只能返回一次值
3. 暫停函數的運行,儲存上下文資訊
如類比管道
yield 的語句形式: yield 1
yield的運算式形式:x = yield
food = yield food_list # 暫停、擷取send賦值給food、返回food_list
內建函數
數值類:
abs()、round()、divmod()、pow()
bin()、oct()、hex()
chr()、ord()
max()、min()、sum()
變數判定:
id()、type()
資料類型 工廠函數:
dict()、int()、float()、str()、set()、list()
功能型函數:
print()、input()、len()、__import__()、sorted()、reversed()
enumarate()、range()
匿名函數相關:
f = lambda x, y: x+yprint(f)res = f(1,2)print(res)
"""1. 沒有名字,使用完立刻回收2. 有參數、有傳回值3. 情境邏輯簡單"""
zip()
max(*args, key=None)
sorted(*args, **kwargs)
函數式編程:
map(func, *iterables) # func遍曆操作可迭代對象
from functools import reduce
reduce(function, sequence, initial=None)
filter(func, *iterables) # 過濾func為True
物件導向:
property()、staticmethod()、classmethod()
hasattr()、getattr()、setattr()、delattr()
issubclass()、isinstance()
super()
Python基礎理論 - 函數