Python函數(shù)參數(shù)類型及傳參方式詳解
Python函數(shù)參數(shù)類型
Python函數(shù)參數(shù)主要分為以下幾種類型:
位置參數(shù)(Positional Arguments)
- 最常見的參數(shù)類型
- 調(diào)用時(shí)必須按定義順序傳遞
- 數(shù)量和順序必須匹配函數(shù)定義
def foo(name,age):
"""
位置參數(shù),按位置對應(yīng)來傳遞參數(shù)
"""
print(f"第一個(gè)參數(shù):{name},第二個(gè)參數(shù){age}")
# test code
foo("Alice", 18)
foo(18, "Alice")第一個(gè)參數(shù):Alice,第二個(gè)參數(shù)18 第一個(gè)參數(shù):18,第二個(gè)參數(shù)Alice
當(dāng)傳入的兩個(gè)參數(shù)位置調(diào)換之后,輸出結(jié)果也會調(diào)換。所以位置參數(shù)必須嚴(yán)格按照對應(yīng)位置來傳遞。
關(guān)鍵字參數(shù)(Keyword Arguments)
- 調(diào)用時(shí)通過參數(shù)名指定值
- 可以不按定義順序傳遞
- 提高代碼可讀性
def foo(name, age):
"""
關(guān)鍵字參數(shù),根據(jù)指定的關(guān)鍵字傳遞參數(shù),與參數(shù)的位置不相關(guān)
:return:
"""
print(f"第一個(gè)參數(shù):{name},第二個(gè)參數(shù){age}")
# test code
foo(name="Alice", age=18)
foo(age=18, name="Alice")第一個(gè)參數(shù):Alice,第二個(gè)參數(shù)18 第一個(gè)參數(shù):Alice,第二個(gè)參數(shù)18
可以看到兩種不同位置的傳參,輸出都是同一個(gè)結(jié)果。
默認(rèn)參數(shù)(Default Arguments)
- 在函數(shù)定義時(shí)指定默認(rèn)值
- 調(diào)用時(shí)可省略使用默認(rèn)值的參數(shù)
- 必須位于非默認(rèn)參數(shù)之后
def foo(name="Dog", age=12):
"""
關(guān)鍵字參數(shù),根據(jù)指定的關(guān)鍵字傳遞參數(shù),與參數(shù)的位置不相關(guān)
:return:
"""
print(f"第一個(gè)參數(shù):{name},第二個(gè)參數(shù){age}")
# test code
foo()
foo(name="Alice", age=18)第一個(gè)參數(shù):Dog,第二個(gè)參數(shù)12 第一個(gè)參數(shù):Alice,第二個(gè)參數(shù)18
可變參數(shù)(Variable-length Arguments)
- *args:接收任意數(shù)量的位置參數(shù),接收后會被放進(jìn)一個(gè)元組內(nèi),也稱為非關(guān)鍵字參數(shù)元組
- **kwargs:接收任意數(shù)量的關(guān)鍵字參數(shù),接收后會放進(jìn)一個(gè)字典內(nèi),也稱為關(guān)鍵字參數(shù)字典,參數(shù)名為key,參數(shù)值為value。
def foo(*args, **kwargs):
for arg in args:
print(f"其他非關(guān)鍵參數(shù)有:{arg}")
for kwarg in kwargs.keys():
print(f"其他關(guān)鍵子參數(shù)有:{kwargs[kwarg]}")多種參數(shù)(包括位置參數(shù),默認(rèn)參數(shù),關(guān)鍵字參數(shù),可變參數(shù))
多種參數(shù)一起傳遞,對傳遞順序是有要求的,一般是位置參數(shù)、關(guān)鍵字參數(shù)、默認(rèn)參數(shù)、可變參數(shù)??傮w來說可變參數(shù)都是放在所有參數(shù)后面的。
def foo(arg1, arg2, arg3="some", *args, **kwargs):
print(f"位置參數(shù)arg1 is {arg1}\n位置參數(shù)arg2 is {arg2}")
print(f"默認(rèn)參數(shù)arg3 is {arg3}")
for arg in args:
print(f"其他非關(guān)鍵參數(shù)有:{arg}")
for kwarg in kwargs.keys():
print(f"其他關(guān)鍵子參數(shù)有:{kwargs[kwarg]}")
# test code
# foo("Alice", 18)
# foo("Alice", 18, "Bob", "Elson", 19)
# foo("Alice", 18, "Bob", "Elson", 19, a="123", b=789)
foo("Alice", 18, "Elson",19, a="123", b=789,)位置參數(shù)arg1 is Alice 位置參數(shù)arg2 is 18 默認(rèn)參數(shù)arg3 is Elson 其他非關(guān)鍵參數(shù)有:19 其他關(guān)鍵子參數(shù)有:123 其他關(guān)鍵子參數(shù)有:789
僅關(guān)鍵字參數(shù)(Keyword-only Arguments)
- 放在*后的參數(shù)必須使用關(guān)鍵字傳遞
def concat(*args, sep=" "):
return sep.join(args)
print(concat("a", "b", "c", sep="-")) # 必須使用關(guān)鍵字傳遞sepPython參數(shù)傳遞方法
Python中的參數(shù)傳遞本質(zhì)上是對象引用的傳遞。對于可變和不可變對象有不同的表現(xiàn):
不可變對象傳遞
- 數(shù)字、字符串、元組等不可變類型
- 函數(shù)內(nèi)修改會創(chuàng)建新對象,不影響原始變量
def modify_num(x):
x = x + 1
print("Inside:", x)
num = 10
modify_num(num) # Inside: 11
print("Outside:", num) # Outside: 10可變對象傳遞
- 列表、字典等可變類型
- 函數(shù)內(nèi)修改會影響原始對象
def modify_list(lst):
lst.append(4)
print("Inside:", lst)
my_list = [1, 2, 3]
modify_list(my_list) # Inside: [1, 2, 3, 4]
print("Outside:", my_list) # Outside: [1, 2, 3, 4]理解Python的參數(shù)傳遞機(jī)制對于編寫正確的函數(shù)至關(guān)重要。根據(jù)需求選擇合適的參數(shù)類型和傳遞方式,可以使代碼更清晰、更安全。
到此這篇關(guān)于Python函數(shù)參數(shù)類型以及傳參方式的文章就介紹到這了,更多相關(guān)python函數(shù)參數(shù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中sqllite插入numpy數(shù)組到數(shù)據(jù)庫的實(shí)現(xiàn)方法
本文給大家介紹python中sqllite插入numpy數(shù)組到數(shù)據(jù)庫的實(shí)現(xiàn)方法,在文章底部給大家提到了Python 操作sqlite數(shù)據(jù)庫及保存查詢numpy類型數(shù)據(jù)的實(shí)例代碼,需要的朋友參考下吧2021-06-06
Python3下錯(cuò)誤AttributeError: ‘dict’ object has no attribute’ite
這篇文章主要跟大家介紹了關(guān)于在Python3下錯(cuò)誤AttributeError: 'dict' object has no attribute 'iteritems'的分析與解決方法,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-07-07
PyCharm MySQL可視化Database配置過程圖解
這篇文章主要介紹了PyCharm MySQL可視化Database配置過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
django 使用 request 獲取瀏覽器發(fā)送的參數(shù)示例代碼
這篇文章主要介紹了django 使用 request 獲取瀏覽器發(fā)送的參數(shù)示例代碼,獲取數(shù)據(jù)有四種方式,具體內(nèi)容詳情大家跟隨腳本之家小編一起看看吧2018-06-06
Python實(shí)現(xiàn)的用戶登錄系統(tǒng)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的用戶登錄系統(tǒng)功能,涉及Python流程控制及字符串判斷等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
python處理multipart/form-data的請求方法
今天小編就為大家分享一篇python處理multipart/form-data的請求方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12

