函式的引數
在定義python函式時可定義形參,這些引數在呼叫時候才能確定具體的值,由函式的呼叫者負責為行參傳入引數值
函式的引數型別
一、 位置引數
也叫必傳引數,順序引數,是最重要的,也是必須在呼叫函式時明確提供的引數!位置引數必須按先後順序,一一對應,個數不多不少的傳遞!
說明:a,b,c是函式add的行參,沒有具體的值,只有在add(x,y,z)是才被傳入值,a=x=1,b=y=2,c=z=3, 其中x,y,z叫做實參,add(4,5,6,7),add(5,7)均為錯誤呼叫
二、關鍵字引數在呼叫函式的時候,傳遞的引數是根據引數名傳值,不必按照定義形參的順序傳遞的引數叫做關鍵字引數
說明:在出傳遞引數時明確指定a=1,c=10,b=3,這樣傳遞這三個變數先後順序可以隨意調換,add(0, 3, c=10)中,既有位置引數又有關鍵字引數,位置引數必須放到關鍵字引數前面否則報錯
三、預設引數
在定義函式的時候,如果給某個引數提供乙個預設值,這個引數就變成了預設引數,不再是位置引數了。在呼叫函式的時候,我們可以給預設引數傳遞乙個自定義的值,也可以使用預設值。
說明:add( 0, 3 )沒有給c傳值,使用預設傳值3
預設引數必須在位置引數後面!
def add(c=2, a, b):此種定義函式的方法是錯誤的預設引數盡量指向不變的物件!
說明:上面的答案可能與你想的不一樣,為什麼呢?應為在定義預設函式時,a 為乙個可變變數,在函式體被讀入記憶體的時候,預設引數a指向的空列表物件就會被建立,a的記憶體位址不變,每次呼叫函式都像a變數中新增a
動態引數
定義: 顧名思義,就是引數的個數是可以變的,這樣在呼叫函式的時候可以傳入任意多個引數動態引數的兩種方式:1.*args:乙個星號表示接收任意個引數。呼叫時,會將實際引數打包成乙個元組傳入形式引數。如果傳遞的是列表,列表將被當做乙個整體2.**kwargs:兩個星表示接受鍵值對的動態引數,數量任意。呼叫的時候會將實際引數打包成字典.*args和**kwargs是約定俗成的引數名稱,也可以隨便寫成其他任何符合命名規範的引數名稱
*args:舉例子**def test(*books):
print(books)
for i in books:
print(i)
books = [ "西遊記", "三國演義", "水滸傳" ]
test("西遊記", "三國演義", "水滸傳" )
test(books)
輸出結果
('西遊記', '三國演義', '水滸傳')
西遊記三國演義
水滸傳(['西遊記', '三國演義', '水滸傳'],)
['西遊記', '三國演義', '水滸傳']
說明:上邊的例子中*books為定義的乙個可變引數,呼叫函式的時候可以傳遞多個引數,print(books)可以檢視數此引數為乙個元組,books列表被當做乙個整體傳入
問題:能不能讓列表它內部的('西遊記', '三國演義', '水滸傳')分別當做引數傳遞進去
答案:當然可以,就是在傳遞列表引數的時候在前面新增乙個星號
def test(*books):
print(books)
for i in books:
print(i)
books = [ "西遊記", "三國演義", "水滸傳" ]
test(books)
結果:(['西遊記', '三國演義', '水滸傳'])
西遊記三國演義
水滸傳** kwargs:舉例說明def func(**kwargs):
print(type(kwargs))
for kwg in kwargs:
print(kwg, kwargs[kwg])
func(k1='v1', k2=[0, 1, 2])
輸出結果:
k1 v1
k2 [0, 1, 2]
思考一下**結果是什麼:
def func(**kwargs):
print(type(kwargs))
for kwg in kwargs:
print(kwg, kwargs[kwg])
core =
func(core)
結果:d:\project\test\venv\scripts\python.exe d:/project/test/venv/monster.py
traceback (most recent call last):
file "d:/project/test/venv/monster.py", line 87, in
func(core)
typeerror: func() takes 0 positional arguments but 1 was given
process finished with exit code 1
分析:由於**kwargs需要傳遞鍵值對的引數,雖然字典是鍵值對的值,但是單獨傳遞字典名的時候會將字典當做位置引數傳遞,那有什麼辦法將字典以鍵值對的方式當做多個引數傳遞呢?
答案:在傳遞字典的前面新增兩個星號
func(**core)正確結果:
語文 81
數學 92
Python函式學習 引數型別
在定義python函式時可定義形參,這些引數在呼叫時候才能確定具體的值,由函式的呼叫者負責為行參傳入引數值 也叫必傳引數,順序引數,是最重要的,也是必須在呼叫函式時明確提供的引數!位置引數必須按先後順序,一一對應,個數不多不少的傳遞!說明 a,b,c是函式add的行參,沒有具體的值,只有在add x...
Python函式學習 函式 引數
本篇是對 python3函式的學習與小結,用於複習鞏固使用,如有理解偏差的地方,還望各位大佬指正。函式的作用 函式的分類 小結 def 函式名 引數列表 函式體 塊 return 返回值 小結 函式名 str 函式定義,只是宣告了乙個函式,它不會被執行,需要呼叫 呼叫的方式,就是函式名後加上小括號,...
python函式引數學習 python函式學習1
函式1 1 定義 def 函式名 引數列表 函式體 2 引數傳遞 在python中,一切都是物件,型別也屬於物件,變數是沒有型別的。a 1,2,3 a helloworld 以上 中,1,2,3 是list型別,helloworld 是string型別,而變數a是沒有型別的,它僅僅是乙個物件的引用 ...