Python函式學習 引數型別 11740513

2021-12-30 01:37:05 字數 2914 閱讀 6612

函式的引數

在定義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是沒有型別的,它僅僅是乙個物件的引用 ...