Python引數型別

2021-09-02 13:37:52 字數 3609 閱讀 1402

位置引數

呼叫函式時根據函式定義的引數位置來傳遞引數

def

print_hello

(name, ***)

: ***_dict =

print

'hello %s %s, welcome to python world!'

%(name, ***_dict.get(***, u'先生'))

# 兩個引數的順序必須一一對應,且少乙個引數都不可以

print_hello(

'tanggu',1

)

關鍵字引數

用於函式呼叫,通過「鍵-值」形式加以指定,可以讓函式更加清晰、容易使用,同時也清除了引數的順序需求

有位置引數時,位置引數必須在關鍵字引數前面,但關鍵字引數之間不存在先後順序

# 以下是用關鍵字引數正確呼叫函式的例項

print_hello(

'tanggu'

, ***=1)

print_hello(

1, name=

'tanggu'

)print_hello(name=

'tanggu'

, ***=1)

print_hello(***=

1, name=

'tanggu'

)# 以下是錯誤的呼叫方式

print_hello(name=

'tanggu',1

)print_hello(***=1,

'tanggu'

)

預設引數

用於定義函式,為引數提供預設值,呼叫函式時可傳可不傳該引數

注:所有位置引數必須出現在預設引數前,包括函式定義和呼叫

預設引數必須指向不變物件

# 正確的預設引數定義方式--> 位置引數在前,預設引數在後

defprint_hello

(name, ***=1)

:...

.# 錯誤的定義方式

defprint_hello

(***=

1, name):.

...# 呼叫時不傳***的值,則使用預設值1

print_hello(

'tanggu'

)# 呼叫時傳入***的值,並指定為2

print_hello(

'tanggu',2

)

可變引數

定義函式時,不確定呼叫時會傳遞幾個引數(也可不傳參),此時使用包裹(packing)位置函式或包裹關鍵字引數

包裹位置傳遞

def

func

(*args):.

...func(

)func(a)

func(a, b, c)

所有傳進的引數都會被args變數收集,會根據傳進引數的位置合併為乙個元組(tuple),args是元組型別

包裹關鍵字傳遞

def

func

(**kargs):.

...func(a=1)

func(a=

1, b=

2, c=

3)

解包裹引數

*和**,也可以在函式呼叫時使用,稱為解包裹(unpacking)

傳遞元組時,讓元組的每乙個元素對應乙個位置引數(list也可以傳遞)

def

print_hello

(name, ***)

:print name, ***

args =

('tanggu'

,'男'

)print_hello(

*args)

# tanggu 男

在傳遞詞典字典時,讓詞典的每個鍵值對作為乙個關鍵字引數傳遞給函式

def

print_hello

(kargs)

:print kargs

kargs =

print_hello(

**kargs)

#

幾種引數混合使用時,基本原則是:

先位置引數,預設引數,包裹位置,包裹關鍵字(定義和呼叫都應遵循)

def

func

(name, age, ***=1,

*args,

**kargs)

:print name, age, ***, args, kargs

func(

'tanggu',25

,2,'music'

,'sport'

,class=2

)# tanggu 25 1 ('music', 'sport')

args和kwargs這個可以自己定義,關鍵在於*和**

*args表示任意多個無名引數,是乙個tuple

**kwargs表示任意多個關鍵字引數,是乙個dict

同時使用時,必須要使*args在**kwargs之前

*args的本質就是將標準呼叫剩下的值集中轉變為元組

用**kwargs建立字典

def

kw_dict

(**kwargs)

:return kwargs

print kw_dict(a=

1,b=

2,c=3)

==

混合使用

def

foo(x,

*args,a=4,

**kwargs)

:#使用預設引數時,注意預設引數的位置要在args之後kwargs之前

print

(x)print

(a)print

(args)

print

(kwargs)

foo(1,

5,6,

7,8,y=

2,z=3)

#呼叫函式,不修改預設引數

1#x的值

4#a的值(5

,6,7

,8)#*args的值

##kwargs的值

def

foo(x,a=4,

*args,

**kwargs)

:##注意:當需要修改預設引數時,要調整預設引數的位置,要放在args之前即可,但不可放在開頭。

print

(x)print

(a)print

(args)

print

(kwargs)

foo(1,

9,5,

6,7,

8,y=

2,z=3)

#呼叫函式,修改預設引數a為9

1#x的值

9#被修改後a的值(5

,6,7

,8)#args的值

#kwargs的值

Python函式引數型別

函式的引數 定義函式 引數 普通引數,預設引數,可變引數 可變位置引數,可變關鍵字引數 keyword only 引數 呼叫函式 傳參 位置引數,關鍵字引數,引數結構 位置引數解構,關鍵字引數解構 普通引數 x,y def add x,y return x y 預設引數 x 1 def inc ba...

python限制引數型別

python3.5對型別進行標註了,但是貌似不檢查具體型別是啥 下面的示例表示,name需要是str型別的,greeting 的返回值是str型別的,但是傳入其他型別的變數也不會報錯,只是起到了標註型別的作用def greeting name str str return hello name進一步...

Python函式引數型別與預設引數

目錄 可變引數 可變位置引數 可變關鍵字引數 混合使用 強制關鍵字引數 預設引數 python函式的引數非常靈活 不同型別的引數,定義時順序很重要 必須按以下順序給出不同型別引數 def func positional args,keyword args,tuple grp args,dict kw...