目錄
- 一.函數文法結構
- 二.函數的定義與調用(很重要.很重要)
- 三.函數的分類
- 函數參數的兩大分類
- 1.形式參數
- 2.實際參數
- 3.形參2種形式
- 4. 實參2種形式
- 5.可變長函數
- 6.函數參數補充(了解)
eg: def 函數名(參數1,參數2):
'''函數注釋'''
函數體代碼
return 傳回值
-
def(必須的)
是定義函數的關鍵字
-
函數名(必須的)
是函數的名字 相當于變量名
函數名的命名規範與風格遵循變量名的
-
參數1,參數2(可選的)
參數可以沒有也可以有多個
表示在使用函數之前需要滿足的一些條件
-
函數注釋(可選的)
類似于産品說明書
主要用于介紹函數功能 參數使用 及其他情況
-
函數體代碼(必須的)
函數核心的代碼邏輯(重要)
-
return傳回值(可選的)
使用函數之後回報給使用者的結果 可以有也可以沒有
- 函數必須先定義後調用(順序不能亂)
- 函數在定義階段隻檢測文法不執行代碼
- 函數在調用階段才會執行函數體代碼
如何調用函數?
函數名加括号, 如果函數在定義階段有參數則在調用階段也需要給參數
函數在定義與調用階段底層原理
1.在記憶體空間中申請一塊空間存儲函數體代碼
2.将函數體代碼所在的空間位址綁定給函數名
3.函數名加括号則會執行函數體代碼
-
内置函數
python解釋器自帶的(提前給你定義好了 你直接使用即可)
- 自定義函數
-
無參函數
在函數定義階段括号内沒有寫參數(變量名)
def my_func(): print('這個函數很牛逼')
-
有參函數
在函數定義階段括号内寫了參數(變量名)
def my_func(a,b): print('這個函數更牛逼') my_func(1,2)
-
空函數
函數體代碼為空(pass ...)
雖然空函數本身沒有含義 但是空函數可以提前規定好編寫代碼的思路def run(): pass def fight(): pass def talk(): pass
-
在函數定義階段括号内所填寫的參數 簡稱"形參"
def func(a, b):
pass
# a和b就是函數func的形參
在函數調用階段括号内傳入的參數 簡稱"實參"
func(1,2)
# 資料1和2就是函數func的實參
形參與實參的關系:
我們可以将形參看成是變量名 實參看成是變量值
兩者在函數調用階段臨時綁定 函數運作結束斷開
形參的表現形式隻有一種就是變量名
實參的表現形式有很多種(但是把握核心 就是 資料值)

-
位置形參
在函數定義階段括号内按照從左往右的順序依次填入的變量名
def func(x,y): # x,y就是位置形參 pass
- 預設參數
函數在定義階段就可以給形參指派了
1.該形參在函數調用階段如果不給值 則使用預設的
2.該形參在函數調用階段也可以繼續給值 則使用你給的
def func(name, age, gender='male') # gender='male'就是預設參數
pass
register('jason', 18) # 預設參數是可以省略的,這裡預設就是male了
register('lili', 18, gender='female') # 不省略就指派
ps:位置形參與預設值形參在定義的時候
位置形參必須在預設值形參的前面
白話就是:格式越簡單的越靠前 格式越複雜的越靠後
-
位置實參
在函數調用階段括号内按照從左往右的順序依次傳入的資料值
def func(x,y): # x,y就是位置形參 pass func(1,2) # 這裡調用函數1,2就是位置實參
-
關鍵字實參(可以打破位置順序)
在函數調用階段通過形參名=資料值的形式指名道姓的傳值
ps:格式越簡單的越靠前 格式越複雜的越靠後def func(name,age,hobby) print('%s:%s:%s' % (name,age,hobby)) func(name='jason', hobby= 'read', age=18) # 這裡就是關鍵字實參 也不是一一對應,打亂了順序
- 可變長形參
*号在形參中的使用
用于接收多餘的位置參數 并組織成元組的形式指派給*号後面的變量名
**号在形參中的使用
用于接收多餘的關鍵字參數 并組織成字典的形式指派給号後面的變量名
- 可變長實參
*号在實參中的使用
會将清單、元組内的元素打散成位置參數的形式一一傳值
**号在實參中的使用
會将字典内的鍵值對打散成關鍵字參數傳入
1.命名關鍵字參數
def register(name,age,*,sex,height):
pass
# register('jason',18,'male',183)
register('lili',18,sex='male',height='1.8m') #正确使用
"""
sex height在傳入實參的時候必須以關鍵字參數的形式
ps:該類型的參數幾乎不用 也幾乎很少能碰到
"""