目錄
一.函式物件
二.函式巢狀
三.命名空間與作用域
四.閉包函式
五.裝飾器
1.函式是第一類物件,即函式可以當作資料傳遞
#1 可以被引用
#2 可以當作引數傳遞
#3 返回值可以是函式
#3 可以當作容器型別的元素
2.利用該特性,優雅的取代多分支的if (不然要是有很多個函式的話,就要寫很多個if elif了)
def foo():
print('foo')
def bar():
print('bar')
dic=
while true:
choice=input('>>: ').strip()
if choice in dic:
dic[choice]()
def max(x,y):
return x if x > y else y
def max4(a,b,c,d):
res1=max(a,b)
res2=max(res1,c)
res3=max(res2,d)
return res3
print(max4(1,2,3,4))
1.定義
#命名空間:存放名字的地方,三種命名空間,(之前遺留的問題x=1,1存放於記憶體中,那名字x存放在**呢?命名空間正是存放名字x與1繫結關係的地方)
2. 命名空間的載入順序
python tom.py
#1、python直譯器先啟動,因而首先載入的是:內建命名空間
#2、執行test.py檔案,然後以檔案為基礎,載入全域性命名空間
#3、在執行檔案的過程中如果呼叫函式,則臨時產生區域性命名空間
3.名字的查詢順序
區域性命名空間--->全域性命名空間--->內建命名空間
#需要注意的是:在全域性無法檢視區域性的,在區域性可以檢視全域性的,如下示例
# max=1
def f1():
# max=2
def f2():
# max=3
print(max)
f2()
f1()
print(max)
4.作用域
#1、作用域即範圍
- 全域性範圍(內建命名空間與全域性命名空間屬於該範圍):全域性存活,全域性有效
- 區域性範圍(區域性命名空間屬於該範圍):臨時存活,區域性有效
#2、作用域關係是在函式定義階段就已經固定的,與函式的呼叫位置無關,如下
x=1def f1():
def f2():
print(x)
return f2
x=100
def f3(func):
x=2func()
x=10000
f3(f1())
#3、檢視作用域:globals(),locals()
legb 代表名字查詢順序: locals -> enclosing function -> globals -> __builtins__
locals 是函式內的名字空間,包括區域性變數和形參
enclosing 外部巢狀函式的名字空間(閉包中常見)
globals 全域性變數,函式定義所在模組的名字空間
builtins 內建模組的名字空間
5.五 global與nonlocal關鍵字
1.一 什麼是閉包?
#內部函式包含對外部作用域而非全域性作用域的引用
def counter():
n=0def incr():
nonlocal n
x=nn+=1
return x
return incr
c=counter()
print(c())
print(c())
print(c())
print(c.__closure__[0].cell_contents) #檢視閉包的元素
2. 閉包的意義與應用
#閉包的意義:返回的函式物件,不僅僅是乙個函式物件,在該函式外還包裹了一層作用域,這使得,該函式無論在何處呼叫,優先使用自己外層包裹的作用域
#應用領域:延遲計算(原來我們是傳參,現在我們是包起來)
print(baidu().decode('utf-8'))
裝飾器就是閉包函式的一種應用場景 Python 函式知識點
1.函式的意思 函式是指對某一功能的封裝 2.函式的語法 def 函式名 函式體函式名 3.函式的返回值 return,當讀到return,不會繼續往下讀 1.如果沒有return,預設返回none 2.如果只有return,返回none 3.return 返回值,只返回乙個值 4.return 值...
python知識點 二
在執行python命令的時候需要攜帶的引數稱之為命令列引數 python m py.compile d demo1.py m py.compile d demo1.py就是命令列引數 python中也可以用sys內建模組的sys.ar 來獲取命令列引數 sys.ar 是命令列引數列表 舉例 pyth...
python知識點 建構函式
python 中的建構函式是 init 函式。用於類的例項化,當乙個物件被建立時,就會立刻被呼叫,有且只能執行一次。classa def init self print a1 執行 a a 輸出 a1 1.建構函式可以不寫,不寫時會呼叫預設的建構函式 classa pass執行 a a 輸出 2.建...