函數對象:python
函數是第一類對象的含義是函數能夠被看成數據處理函數
函數可用於:對象
def func():blog
print(‘func’)內存
1.引用 f = func 把內存地址賦值給f作用域
2.看成參數傳給一個函數 def foo(func)class
3.看成函數的返回值 return func容器
4.能夠看成容器類型的元素 l =[func,1,2]變量
#函數嵌套的定義: def f1(): def f2(): def f3(): print('from f3') f3() f2() f1() #函數嵌套調用: 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.名稱空間
存放名字和值的綁定關係的地方 (存值的內存地址)
2.名稱空間的三大類
①內置名稱空間:存放python解釋器自帶的名字
解釋器打開生效,關閉失效
②全局名稱空間:除了內置和局部的就是全局
文件運行時生效,執行完畢失效
③局部名稱空間:用於存放函數調用期間函數體產生的名字
文件執行中調用某個函數時生效,函數執行完失效
總結:三種名稱空間的加載順序:內置名稱空間-全局名稱空間-局部名稱空間
名稱空間查找順序:基於當前位置,自下向上找
3.做用域
做用域指的是區域、範圍,做用域即做用的範圍
全局做用範圍:全局做用域(內置名稱空間和全局名稱空間)
全局有效,全局存活
局部做用範圍:局部做用域(局部名稱空間)
局部有效,臨時存活
做用域關係是在函數定義階段就固定死了,但凡調用函數都須要跑到定義階段判斷做用域關係
x = 1 def f1(): print(x) der f2(): x = 11 f1() f2()
結果爲1
nonlocal 改局部,函數內往外找,沒有就報錯
global 改全局,沒有也不會報錯
在局部改全局可變類型,能夠直接改
在局部改全局不可變類型,須要聲明global,聲明爲全局的變量就能夠直接修改了