1、定義函數
只檢測語法,不執行代碼函數
2、函數定義的三種方式
- 有參函數
- 無參函數
- 空函數
3、調用函數
def f1():
return 123
f = f1()
f1()*2
lis = [f1(),2]
4、函數的返回值
return返回返回值,函數遇到return會終止,return能夠返回任意數據類型的值,同時也能夠返回多個值code
函數只有在調用階段纔會接收返回值對象
5、函數的參數
5.1 形參
接收實參,具備描述意義,沒有具體值作用域
5.2 實參
具備具體的值,傳參給形參it
- 位置形參:從左到右一個一個接收位置實參
- 位置實參:從左到右一個一個傳給形參
- 關鍵字實參:根據形參名傳參
- 默認形參:給形參一個默認值,若是實參不對該形參傳值,則使用默認值;反之,使用實參傳的值
- 關鍵字實參必須得在位置實參後面,默認形參也必須在位置形參後面
- 一個形參只能接收一個值
def f1(x,y):
pass
f1(1,x=2) # 報錯
6、可變長參數
- *形參:接收多餘的位置實參,以元組的方式存儲
- *實參:把元組打散成一個個位置實參,而後傳給形參(不推薦使用,只作瞭解)
- **形參:接收多餘的關鍵字實參,以字典的方式存儲
- **實參:把字典打散稱一個個關鍵字實參,而後傳給形參(不推薦使用,只作瞭解)
def f1(*args,**kwargs):
pass
# f1能夠接收全部的參數
f1(1,1,2,3,3,4,5,x=2,y=5,a=8)
7、函數對象
def f1():
pass
- 引用
f=f1
- 做爲函數返回值
return f1
- 做爲函數參數傳入
f2(f1)
- 容器元素
lis=[f1]
8、函數的嵌套
def f1():
def f2():
pass
f2() # 報錯
9、名稱空間與做用域
- 內置名稱空間:存放內置的名字,如
len/eval/enumerate/bytes/max/min/sorted/map/filter....
- 全局名稱空間:除了內置與局部,其餘的名字都存放在全局名稱空間內
- 局部名稱空間:函數內部的名字都是局部名稱空間,不一樣函數內部的名字互不干涉
- 查找順序:從當前開始往上尋找,若是當前是局部名稱空間,查找順序爲:局部--》全局--》內置
- 執行順序:先內置(Python解釋器啓動的時候纔會生成)--》全局(文件執行的時候纔會生成)--》局部(函數調用的時候纔會生成)
做用域:全局名稱空間和局部名稱空間中可能會存在名字相同的變量,可是這兩個變量互不影響。只針對不可變數據類型,對於可變數據類型除外,儘可能不要使用可變類型的這個特性,若是真的使用,能夠不一樣的函數定義不一樣的變量出來。class