def func(): print('from func') func()#第一種函數名加括號 def max_2(x,y): if x > y: return x else: return y res = max_2(10,3) print(res)#表達式去調用 def max_2(x,y): if x > y: return x else: return y res = max_2(10,max(2,3)) print(res)#函數做爲參數的形式
def func1(): print('from func1') def func2(): func1() print('from func2') func2() >>>from func1 from func2
什麼是名稱空間?python
名稱空間就是用來存放名字的空間。函數
名稱空間的做用code
若是你想訪問一個變量值,必須先訪問對應的名稱空間,拿到對應的內存地址的綁定關係blog
名稱空間的分類生命週期
一、內置名稱空間:內存
就是python解釋器一啓動就可使用的名字,好比print,len,max,input等等咱們以前也並無定義過,能夠直接拿來使用的名字,這些名字就存儲在內置名稱空間中作用域
二、全局的名稱空間:input
存放文件級別的名字,就是全局名稱空間,是在程序從上到下被執行的過程當中依次加載進內存的,放置了咱們設置了全部變量名和函數名,if,while,for,內部定義的名字執行以後都存放在全局名稱空間class
三、局部名稱空間變量
就是在函數內部定義的全部名字,注意的是當調用函數的時候,纔會產生這個名稱空間,隨着函數執行的結束,命名空間就消失
生命週期:
一、內置名稱空間
在python解釋器啓動的時候生效,關閉python解釋器的時候失效
二、全局名稱空間
當你啓動這個py 文件的時候生效,當前頁面代碼執行結束以後失效
三、局部名稱空間
當你調用函數的時候生效,函數一旦調用完畢就失效
名稱空間的使用範圍
一、在局部能夠全局名稱,內置名稱
x = 1 def func(): print(x)#使用了全局名稱x,以及使用了內置名稱print func() >>>1
二、在全局可使用內置名稱空間,但不可以使用局部名稱空間
x = 1 def func(): a = 1 print(x)#使用了全局名稱x,以及使用了內置名稱print func() print(a)#NameError: name 'a' is not defined #此時a已經消失了
三、在內置不可以使用局部和全局的名稱
x = 1 def func(): x = 2 print(x)#使用了局部名稱x def func1(): x = 3#我本身有就用我本身的,沒有就去找上一級,若是上一級都沒去找內置,若是內置都沒有那就保存 print(x) func1() func() >>>2 >>>3 x = 1 def func(): x = 2 print(x)#使用了局部名稱x def func1(): print(x)#我本身沒有就用上一級的x=2 func1() func() >>>2 >>>2 x = 1 def func(): print(x) def func1(): print(x)#我本身沒有就用上一級的,上一級也沒有就再找上一級 func1() func() >>>1 >>>1
x = 1 def index(arg = x):#默認參數,此時已經將x=1賦值給arg print(x) print(arg) x = 2 index() >>>2 >>>1
一、全局做用域
全局能夠調用的名字就存在於全局做用域
內置名稱空間+全局名稱空間
二、局部做用域
局部能夠調用的名字就存放於局部做用域
局部名稱空間
對於不可變類型,在局部能夠查看全局做用域中的變量。可是不能直接修改,
若是想要修改,須要在程序中添加一個global變量,那麼這個變量在局部的全部操做將對全局的變量有效
x = 1 def func(): global x#聲明此時的x就是全局變量 x =2 print(x) func() print(x) >>>2 >>>2 #在局部修改外部函數的變量 def func(): x = 1 def func1(): nonlocal x x = 3 func1() print(x)#經過nonlocal就能夠修改離他當前最近的一個外層變量的值,此時不會打印x=1,會打印x=3 func() >>>3
加油吧,亞峯gogogo