欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python參數(shù)、參數(shù)類型、位置參數(shù)、默認(rèn)參數(shù)、可選參數(shù)舉例詳解

 更新時(shí)間:2025年01月02日 09:49:15   作者:五月天的尾巴  
這篇文章主要介紹了Python?3.13中函數(shù)參數(shù)的不同類型,包括位置參數(shù)、默認(rèn)值參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)、命名關(guān)鍵字參數(shù)以及它們的組合使用規(guī)則,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

以下內(nèi)容基于Python3.13進(jìn)行講解,對(duì)于Python3.x來說下面的內(nèi)容都是支持的。

參數(shù)類型:

1、位置參數(shù)(Positional Arguments),必填參數(shù)

2、默認(rèn)值參數(shù)(Default Arguments),非必傳

3、可變參數(shù),非必傳,不限制參數(shù)個(gè)數(shù),比如說給多個(gè)人發(fā)郵件,發(fā)郵件的人數(shù)不確定

4、關(guān)鍵字參數(shù)(Keyword Arguments),非必傳,不限制參數(shù)個(gè)數(shù),會(huì)把傳過來的關(guān)鍵字參數(shù),放到一個(gè)字典里面,傳參的時(shí)候必須得用k=v這樣子來傳

5、命名關(guān)鍵字參數(shù)/強(qiáng)制關(guān)鍵字參數(shù)(Keyword-Only Arguments)

一、位置參數(shù)

也叫必傳參數(shù),順序參數(shù),是最重要的,也是必須在調(diào)用函數(shù)時(shí)明確提供的參數(shù)!位置參數(shù)必須按先后順序,一一對(duì)應(yīng),個(gè)數(shù)不多不少的傳遞!

定義:就是在給函數(shù)傳參數(shù)時(shí),按照順序,依次傳值。

def add(a,b):
    print('a:{}, b:{}'.format(a,b))

print(add(1,2))

#運(yùn)行結(jié)果:
D:\App\python\python3.13.0\python.exe D:\WorkSpace-Python\Test\test.py 
a:1, b:2

在這個(gè)例子中,a和 b就是位置參數(shù),而且兩個(gè)值必傳,否則會(huì)報(bào)錯(cuò)。

二、默認(rèn)參數(shù)(Default Arguments)

默認(rèn)參數(shù)允許我們?cè)?strong>函數(shù)定義時(shí)為參數(shù)指定默認(rèn)值。如果調(diào)用函數(shù)時(shí)不傳遞該參數(shù),將使用默認(rèn)值。

def test(name,message='Boy'):
    print('name:{}, message:{}'.format(name,message))

test('Tom') #若不傳默認(rèn)參數(shù),則使用默認(rèn)值
test('Alice','Girl')  # 輸出:name:Alice, message:Girl
test('Alice',message = 'Girl') # 輸出:name:Alice, message:Girl

#運(yùn)行結(jié)果:
D:\App\python\python3.13.0\python.exe D:\WorkSpace-Python\Test\test.py 
name:Tom, message:Boy
name:Alice, message:Girl
name:Alice, message:Girl

默認(rèn)參數(shù)使用注意事項(xiàng)a. 默認(rèn)參數(shù)必須在位置參數(shù)后面,這樣才能被解釋器正確識(shí)別,否則會(huì)產(chǎn)生二義性。

def test(message='Boy',name): # SyntaxError: parameter without a default follows parameter with a default
    print('name:{}, message:{}'.format(name,message))

b. 默認(rèn)參數(shù)一定要指向不變對(duì)象!

def defaultzero(arr = []):  #我們的本意是提供的arr參數(shù)為0時(shí) 返回只有一個(gè)0的arr
    arr.append(0)
    return arr
print(defaultzero())  #輸出:[0]
print(defaultzero())  #輸出:[0, 0] 顯然重復(fù)調(diào)用的時(shí)候結(jié)果不是我們所期望的

#解決方案 使用None
def defaultzero1(arr = None):
    if arr == None:
        arr = []
        arr.append(0)
    return arr
print(defaultzero1()) #輸出:[0]
print(defaultzero1()) #輸出:[0] 重復(fù)調(diào)用的時(shí)候,也輸出相同

#這說明arr是一個(gè)對(duì)象
#事實(shí)上Python所有的數(shù)據(jù)類型其實(shí)都是對(duì)象

說明:上面的答案可能與你想的不一樣,為什么呢?應(yīng)為在定義默認(rèn)函數(shù)時(shí),arr 為一個(gè)可變變量,在函數(shù)體被讀入內(nèi)存的時(shí)候,默認(rèn)參數(shù)arr指向的空列表對(duì)象就會(huì)被創(chuàng)建,arr的內(nèi)存地址不變,每次調(diào)用函數(shù)都像arr變量中添加0

結(jié)果說明python解釋器會(huì)將默認(rèn)參數(shù)作為一個(gè)公共對(duì)象來對(duì)待,多次調(diào)用含有默認(rèn)參數(shù)的函數(shù),就會(huì)進(jìn)行多次修改。

因此定義默認(rèn)參數(shù)時(shí)一定要使用不可變對(duì)象(int、float、str、tuple)。使用可變對(duì)象語法上沒錯(cuò),但在邏輯上是不安全的,代碼量非常大時(shí),容易產(chǎn)生很難查找的bug。

三、關(guān)鍵字參數(shù)

關(guān)鍵字參數(shù)(Keyword Arguments)是一種在函數(shù)調(diào)用時(shí)使用參數(shù)名稱來指定參數(shù)值的方式,不必按照定義形參的順序傳遞參數(shù)。

def person(name, age):
	print('name:{}, age:{}'.format(name, age))

# 使用關(guān)鍵字參數(shù)調(diào)用函數(shù)
person(name='張三',age=20) #輸出:name:張三, age:20
person(age=31,name='李四') #輸出:name:李四, age:31

使用關(guān)鍵字參數(shù)調(diào)用函數(shù)對(duì)參數(shù)順序沒有要求。

既有位置參數(shù)又有關(guān)鍵字參數(shù),位置參數(shù)必須放到關(guān)鍵字參數(shù)前面否則報(bào)錯(cuò)

四、可變位置參數(shù)

可變位置參數(shù):Python函數(shù)提供了可變參數(shù),來方便進(jìn)行參數(shù)個(gè)數(shù)未知時(shí)的調(diào)用??勺儏?shù)將以tuple 元組形式傳遞。

定義:可變參數(shù)就是傳入的參數(shù)個(gè)數(shù)是可變的,可以是0個(gè),1個(gè),2個(gè),……很多個(gè)。作用:就是可以一次給函數(shù)傳很多的參數(shù)特征(格式):*args 【*參數(shù) (即在參數(shù)前加*號(hào))】

def add(a,b):
    return a,b

#上述函數(shù)若傳入多個(gè)參數(shù)則需要定義多個(gè)變量,可以簡(jiǎn)化為可變參數(shù)形式
def add1(*args):
	print('args:{}, type:{}'.format(args,type(args)))
    result = 0
    for n in args:
        result = result + n
    return result

# 調(diào)用函數(shù)1
print(add1(1,2,3))

# 調(diào)用函數(shù)2
tupleArray=(1,2,3)
# *tupleArray這種方式很常見,很重要
print(add1(*tupleArray))  #輸出結(jié)果:6

# 調(diào)用函數(shù)3
listArray=[1,2,3]
# *listArray這種方式很常見,很重要
# *listArray表示把listArray這個(gè)list中所有元素作為可變參數(shù)傳進(jìn)去
print(add1(*listArray))  #輸出結(jié)果:6

#運(yùn)行結(jié)果:
D:\App\python\python3.13.0\python.exe D:\WorkSpace-Python\Test\test.py 
args:(1, 2, 3), type:<class 'tuple'>
6
args:(1, 2, 3), type:<class 'tuple'>
6
args:(1, 2, 3), type:<class 'tuple'>
6

可以發(fā)現(xiàn):*args的本質(zhì)就是把入?yún)⒁詔uple形式傳遞關(guān)于*星號(hào)的用法可以參考另一篇博文:《python中的*與**用法詳解

五、可變關(guān)鍵字參數(shù)

關(guān)鍵字參數(shù)非必傳。Python的可變位置參數(shù)以tuple形式傳遞,而關(guān)鍵字參數(shù)則是以dict形式傳遞。 即可變參數(shù)傳遞的是參數(shù)值,關(guān)鍵字參數(shù)傳遞的是參數(shù)名:參數(shù)值鍵值對(duì)。

定義:關(guān)鍵字參數(shù)允許你傳入0個(gè)或任意個(gè)含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)dict。在調(diào)用函數(shù)時(shí),可以只傳入必選參數(shù):

def test(name,**kwargs):
    print("name:{}, kwargs:{}, kwargs-type:{}".format(name,kwargs,type(kwargs)))

#案例一:
test('張三') # 輸出:name:張三, kwargs:{}, kwargs-type:<class 'dict'>

#案例二:
test('張三',age=10) # 輸出:name:張三, kwargs:{'age': 10}, kwargs-type:<class 'dict'>

#案例三:
dictArray = {'city': 'Beijing', 'sex': '男'}
test('李四', **dictArray ) # 輸出:name:李四, kwargs:{'city': 'Beijing', 'sex': '男'}, kwargs-type:<class 'dict'>

#**dictArray表示把dictArray這個(gè)dict的所有key-value用關(guān)鍵字參數(shù)傳入到函數(shù)的**kwargs參數(shù),kwargs將獲得一個(gè)dict。注意kwargs獲得的dict是dictArray的一份拷貝,對(duì)kwargs的改動(dòng)不會(huì)影響到函數(shù)外的dictArray。


#運(yùn)行結(jié)果:
D:\App\python\python3.13.0\python.exe D:\WorkSpace-Python\Test\test.py 
name:張三, kwargs:{}, kwargs-type:<class 'dict'>
name:張三, kwargs:{'age': 10}, kwargs-type:<class 'dict'>
name:李四, kwargs:{'city': 'Beijing', 'sex': '男'}, kwargs-type:<class 'dict'>
  • **修飾的參數(shù)必須是最后一個(gè)
  • **修飾的參數(shù)必須以關(guān)鍵字的參數(shù)方式傳參,Python解釋器會(huì)將傳入的關(guān)鍵字和關(guān)鍵字的值生成一個(gè)字典供函數(shù)內(nèi)部使用

六、命名關(guān)鍵字參數(shù)/強(qiáng)制關(guān)鍵字參數(shù)

命名關(guān)鍵字參數(shù):強(qiáng)制關(guān)鍵字參數(shù)(Keyword-only arguments)是在3.1版本之后引入的,指在函數(shù)定義時(shí),使用*后綴來限制函數(shù)調(diào)用時(shí)必須使用關(guān)鍵字參數(shù)進(jìn)行傳遞,而不允許使用位置參數(shù)。

定義:例如只接收city和sex的參數(shù),其他,不接收。

def person(*, city, sex):   # 使用分隔符“*”,表示后面的參數(shù)必須使用關(guān)鍵字傳遞
	print(city, sex)

person(city='USA',sex='男')  # 輸出:USA 男

作用:限制要傳入的參數(shù)的名字,只能傳已命名關(guān)鍵字參數(shù)。

特征:命名關(guān)鍵字參數(shù)需要一個(gè)特殊分隔符*,而后面的參數(shù)被視為命名關(guān)鍵字參數(shù)。

def person(name, age, *, city, sex):
	print(name, age, city, sex)

person('John',20,city='USA',sex='男')  # 輸出:John 20 USA 男
#person('John',20,city='USA',birthday='1996-02-11') 報(bào)錯(cuò) TypeError: person() got an unexpected keyword argument 'birthday'

關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù)的區(qū)別在于,前者可以傳遞任何名字的參數(shù),而后者只能傳遞*后面名字的參數(shù)。如果函數(shù)定義中已經(jīng)有了一個(gè)可變參數(shù),后面跟著的命名關(guān)鍵字參數(shù)就不再需要一個(gè)特殊分隔符*了:

def person(name, age, *args, city, sex):
	print(name, age,args, city, sex)

person('John',20, *[1,2,3,4],city='USA',sex='男')

#運(yùn)行結(jié)果:
D:\App\python\python3.13.0\python.exe D:\WorkSpace-Python\Test\test.py 
John 20 (1, 2, 3, 4) USA 男

七、組合使用

定義:把以上五種參數(shù)組合在一起的參數(shù)組合

排放順序:在Python中定義函數(shù),可以用必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù),這5種參數(shù)都可以組合使用。但是請(qǐng)注意,參數(shù)定義的順序必須是:必選參數(shù)–>默認(rèn)參數(shù)–>可變參數(shù)–>命名關(guān)鍵字參數(shù)–>關(guān)鍵字參數(shù)。

可讀性是代碼的一個(gè)很重要的要求,所以盡量避免使用多種參數(shù)的組合。

def person(name, age,clas='二班', *args, **kwargs):
	print('name:{}, age:{}, clas:{}, args:{}, kwargs:{}'.format(name, age,clas,args, kwargs))

person('John',20) #輸出:name:John, age:20, clas:二班, args:(), kwargs:{}
person('John',20,'4班',1,2) #輸出:name:John, age:20, clas:4班, args:(1, 2), kwargs:{}
person('John',20,'4班',1,2,city='USA',sex='男') #輸出:name:John, age:20, clas:4班, args:(1, 2), kwargs:{'city': 'USA', 'sex': '男'}


def f1(a, b, c=0, *, d, **kw):
    print('a:{},b:{},c:{},d:{},kw:{}'.format(a,b,c,d,kw))

f1(1,2,d=4)  # 輸出:a:1,b:2,c:0,d:4,kw:{}
f1(1,2,3,d=4,e=5) #輸出:a:1,b:2,c:3,d:4,kw:{'e': 5}

總結(jié):

  • 位置實(shí)參與關(guān)鍵字實(shí)參混合使用時(shí),位置實(shí)參必須放在關(guān)鍵字實(shí)參前面(語法規(guī)定)
  • 位置形參與默認(rèn)形參混合使用時(shí),位置形參必須在默認(rèn)形參的左邊
  • *args**kwargs混合使用時(shí),*args必須寫在**kwargs的前面,否則會(huì)報(bào)語法錯(cuò)誤

***的使用

  • ***在函數(shù)定義處使用
  • *:把多余的普通實(shí)參打包成元組
  • **:把多余的關(guān)鍵字實(shí)參打包成字典
  • ***在函數(shù)調(diào)用處使用
  • *:對(duì)元組或列表進(jìn)行解包
  • **:對(duì)字典進(jìn)行解包
  • ***同時(shí)在函數(shù)定義處和調(diào)用處使用
  • 先解包變成位置形參
  • 再將多余的位置形參打包
# 示例一
def func(x, y, z):
	print(x, y, z)

func(*[1, 2, 3])
func(*(1, 2, 3))
func(**{"x": 1, "y": 2, "z": 3})

# 實(shí)例二
def func(x, y, z, *args):
	print(x, y, z)
	print(args)

func(5, 6, 7, *[1, 2, 3])

總結(jié) 

到此這篇關(guān)于Python參數(shù)、參數(shù)類型、位置參數(shù)、默認(rèn)參數(shù)、可選參數(shù)的文章就介紹到這了,更多相關(guān)Python參數(shù)詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • django遷移數(shù)據(jù)庫錯(cuò)誤問題解決

    django遷移數(shù)據(jù)庫錯(cuò)誤問題解決

    這篇文章主要介紹了django遷移數(shù)據(jù)庫錯(cuò)誤問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python深度學(xué)習(xí)tensorflow1.0參數(shù)初始化initializer

    python深度學(xué)習(xí)tensorflow1.0參數(shù)初始化initializer

    這篇文章主要為大家介紹了python深度學(xué)習(xí)tensorflow1.0參數(shù)初始化initializer示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • python字符串駐留機(jī)制的使用范圍知識(shí)點(diǎn)詳解

    python字符串駐留機(jī)制的使用范圍知識(shí)點(diǎn)詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python字符串駐留機(jī)制的使用范圍相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-09-09
  • 利用Python的Django框架中的ORM建立查詢API

    利用Python的Django框架中的ORM建立查詢API

    這篇文章主要介紹了利用Python的Django框架中的ORM建立查詢API,對(duì)Managers和QuerySets進(jìn)行了著重介紹,需要的朋友可以參考下
    2015-04-04
  • 使用Python的pygame庫繪制圖形示例詳解

    使用Python的pygame庫繪制圖形示例詳解

    這篇文章主要介紹了使用Python的Pygame庫繪制圖形的方法,Pygame是被設(shè)計(jì)用來寫游戲的python模塊集合,Pygame是在優(yōu)秀的SDL庫之上開發(fā)的功能性包,通常使用Pygame來開發(fā)具有全部特性的游戲和多媒體軟件,感興趣的朋友可以參考下
    2024-02-02
  • Python時(shí)間和日期庫的實(shí)現(xiàn)

    Python時(shí)間和日期庫的實(shí)現(xiàn)

    這篇文章主要介紹了Python時(shí)間和日期庫的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python持久性管理pickle模塊詳細(xì)介紹

    python持久性管理pickle模塊詳細(xì)介紹

    這篇文章主要介紹了python持久性管理pickle模塊詳細(xì)介紹,本文講解了什么是持久性、一些經(jīng)過 pickle 的 Python等內(nèi)容,并講給出了18個(gè)使用示例,需要的朋友可以參考下
    2015-02-02
  • Pandas:Series和DataFrame刪除指定軸上數(shù)據(jù)的方法

    Pandas:Series和DataFrame刪除指定軸上數(shù)據(jù)的方法

    今天小編就為大家分享一篇Pandas:Series和DataFrame刪除指定軸上數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 基于Python開發(fā)PPTX壓縮工具

    基于Python開發(fā)PPTX壓縮工具

    在日常辦公中,PPT文件往往因?yàn)閳D片過大而導(dǎo)致文件體積過大,不便于傳輸和存儲(chǔ),所以本文將使用Python開發(fā)一個(gè)PPTX壓縮工具,需要的可以了解下
    2025-02-02
  • Python的數(shù)據(jù)結(jié)構(gòu)與算法的隊(duì)列詳解(3)

    Python的數(shù)據(jù)結(jié)構(gòu)與算法的隊(duì)列詳解(3)

    這篇文章主要為大家詳細(xì)介紹了Python的隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評(píng)論