1、什麼是函數app
函數就是代碼的一種組織形式,是指將一組語句的集合經過一個名字(函數名)封裝起來,要想指向這個函數,只須要調用其函數名便可ide
函數分爲兩大類:內置函數 和 自定義函數函數
2、爲什麼要用函數spa
減小重複代碼3d
使程序變的可擴展code
使程序變得易維護blog
3、如何用函數文檔
一、原則:函數必須先定義,再調用event
1)定義階段:只檢測語法,不執行函數體代碼class
2)調用階段:會出發函數體代碼的執行
二、定義函數的語法:
def 函數名(參數1, 參數2):
""" 文檔註釋 """
函數體
return 返回值
三、調用函數的語法:
函數名(值1, 值2)
四、定義一個函數,只是定義的話不會執行
1)def是關鍵字,後跟一個空格
2)函數名,本身定義,起名須要遵循變量命名規則
3)後面括號和冒號不能省,括號內能夠有參數
4)函數內全部代碼縮進
五、函數定義的三種形式:
有參函數:經過接受外部傳進來的值,進行一系列的操做
無參函數:只是進行函數內部的操做
空函數:什麼事情都不作,內部用pass進行佔位
六、函數調用的三種形式:
語句形式:僅僅是函數名加括號
表達式形式:將函數的結果與數字類型(整型、浮點型)相計算
看成參數傳給另外一個函數,例如:range(len("hello"))
4、函數的返回值
一、注意點:
1)函數的返回值沒有類型限制
2)函數的返回值沒有個數限制
二、返回多個值:多個返回值之間用逗號隔開,返回的是元組形式
三、返回一個值
四、返回零個值或者沒有 return
return 除了有返回值的功能,還有函數結束執行的功能:函數內能夠有多個return,但只要執行一次,整個函數就當即結束,而且將 return 後的值返回
5、函數的參數
一、形式參數:在定義函數階段,括號內定義的參數稱爲形參
二、實際參數:在調用函數階段,括號內傳入的值稱爲實參
在調用函數階段會將實參的值傳遞給形參,這種傳遞關係只在調用函數時生效,在函數執行完後就會失效
三、位置參數
1)站在形參角度(位置形參)
定義:在函數定義階段,按照從左到右的順序依次定義的形參稱之爲位置形參
特色:但凡按照位置定義的形參,必須被傳值,多一個不行少一個也不行
def func(x, y, z): print(x, y, z) func(1, 2) # 錯誤
func(1, 2, 3) # 正確
func(1, 2, 3, 4) # 錯誤
2)站在實參角度(位置實參)
定義:在調用階段,按照從左到右的順序依次傳入的值稱之爲位置實參
特色:與形參一一對應
def func(x, y, z): print(x, y, z) func(2, 1, 3)
四、關鍵字參數(關鍵字形參)
定義:在調用階段,按照 key=value 的形式定義的實參稱之爲關鍵字實參
特色:能夠徹底打亂順序,但仍然能爲指定的形參傳值
def func(x, y, z): print(x, y, z) func(x=1, y=2, z=3) func(1, 2, 3) func(z=3, y=2, x=1)
實參中位置參數與關鍵字參數能夠混合使用,可是必須遵循如下原則:
1)位置參數必須放在關鍵字參數的前面
2)不能對同一個形參重複傳值
def func(x, y, z): print(x, y, z) func(1, z=3, y=2) # 正確
func(z=3, 1, y=2) # 錯誤
func(1, z=3, x=2, y=3) # 錯誤
func(x=1, y=2, 3) # 錯誤
五、默認參數(默認形參)
定義:在函數定義階段,就已經爲形參賦值,該形參稱之爲默認形參
特色:
1)定義階段就已經有值,意味着調用階段能夠不用傳值
2)位置形參必須放到默認形參的前面
3)默認形參的值在函數定義階段就已經固定了,定義階段以後的改動不會影響該值
4)默認形參的值一般應該是不可變類型
def func(x, y, z=100): print(x, y, z) func(10, 20) func(10, 20, 200)
def add_hobby(name, x, hobbies=[]): hobbies.append(x) print("%s 的愛好有 %s" %(name, hobbies)) add_hobby("qiu", "read") add_hobby("xi", "eat") add_hobby("qiuxi", "play") # 改進
def add_hobby(name, x, hobbies=None): if hobbies is None: hobbies = [] hobbies.append(x) print("%s 的愛好有 %s" %(name, hobbies)) add_hobby("qiu", "read") add_hobby("xi", "eat") add_hobby("qiuxi", "play")
六、可變長參數
定義:指的是在調用階段,實參的個數是不固定的
實參無非兩種方式(位置實參,關鍵字實參),對應的形參也必須有兩種解決方案來分別接收溢出位置實參或關鍵字實參
其中:
用 * 表示溢出的位置實參
用 ** 表示溢出的關鍵字實參
1) 一個星號的用法
在形參前加一個星號:星號會將溢出的位置實參存成元組的形式,而後賦值給星號後的形參名
在實參前加一個星號:但凡碰到實參中帶一個星號的,先將實參打散成位置實參再與形參作對應
2)兩個星號的用法
在形參前加兩個星號:星號會將溢出的關鍵字實參存成字典的形式,而後賦值給星號後的形參名
在實參前加兩個星號:但凡碰到實參中帶兩個星號的,先將實參打散成關鍵字實參再與形參作對應
七、命名關鍵字參數
定義:在定義函數時,* 與 ** 之間的參數稱之爲命名關鍵字參數
特色:在調用函數時,命名關鍵字參數必須按照 key=value 的形式傳值
def func(x, *, y=1, z): print(x) print(y) print(z) # func(1, 2, 3, 4, 5) # 錯誤
func(1, z=2) # 正確, 打印1 1 2
def func(a, b=2, *args, c, **kwargs): print(a) print(b) print(args) print(c) print(kwargs) func(1, 7, 3, 4, c=5, name='qiuxi') # 打印 1 7 (3, 4) 5 {'name': 'qiuxi'}