摘要:即,雙星號(hào)參數(shù)接收的參數(shù)作為字典。在有些情況下,單星號(hào)函數(shù)參數(shù)和雙星號(hào)函數(shù)參數(shù)是一起使用的,定義如下總結(jié)默認(rèn)值函數(shù)參數(shù)。雙星號(hào)函數(shù)參數(shù)。
函數(shù)調(diào)用時(shí)的參數(shù)傳遞方式:(調(diào)用函數(shù)) 傳遞方式有以下四種: 位置傳參 序列傳參 關(guān)鍵字傳參 字典關(guān)鍵字傳參
---------------------------------------------------yu---
(1)位置傳參:
實(shí)際參數(shù)(實(shí)參)的對(duì)應(yīng)關(guān)系與形式參數(shù)(形參)對(duì)應(yīng)關(guān)系是按位置依次對(duì)應(yīng)的
實(shí)參的個(gè)數(shù)和形參的個(gè)數(shù)要嚴(yán)格一直
實(shí)例:
def myfun1(a, b, c): # 形參 print(a) print(b) print(c) # 調(diào)用 myfun1(1, 2, 3) # 實(shí)參
(2)序列傳參
序列傳參是指在函數(shù)調(diào)用過(guò)程中,用*將序列拆解后按位置進(jìn)行傳遞的方式
序列傳參時(shí),序列拆解的位置將與形參一一對(duì)應(yīng)
序列的位置信息對(duì)應(yīng)相應(yīng)的參數(shù)
實(shí)例:
# 假設(shè)已經(jīng)有序列可用 L1 = [11,22,33] T1 = (4.4,5.5,6.6) S1 = "ABC" myfun1(*L1) myfun1(*T1) myfun1(*S1)
(3)關(guān)鍵字傳參:
關(guān)鍵字傳參是指?jìng)鲄r(shí),按形參的名稱給形參賦值
實(shí)參和形參按形參名進(jìn)行匹配(可以不按位置順序進(jìn)行匹配)
實(shí)例:
# 關(guān)鍵字傳參 myfun1(c = 33, b = 22, a = 11)
(4)字典關(guān)鍵字傳參:
是指實(shí)參為字典,將字典用**拆解后進(jìn)行關(guān)鍵字傳參
實(shí)例:
d1 = {"c":33, "b":22, "a":11} myfun1(**d1)
說(shuō)明:字典的鍵名和形參名必須一
字典的鍵名必須為字符串,并符合關(guān)鍵字的命名
字典的鍵名要在形參中存在
(5)函數(shù)的綜合
傳參方式,在能確定每個(gè)形參否能唯一匹配一個(gè)實(shí)參的情況也可以任意傳參
傳參時(shí),位置傳參和序列傳參要先于關(guān)鍵字傳參和字典關(guān)鍵子傳參
實(shí)例: myfun1(100, *[200, 300])
myfun1(*[10,20],30) myfun1(*[10], 20, *[30]) myfun1(100, **{"c":300, "b":200}) myfun1(**{"c":300, "b":200}, a = 100) myfun1(b = 200, c = 300, 100) # 錯(cuò)的
注意傳參時(shí):
1、不可變類型的數(shù)據(jù)作為函數(shù)參數(shù)傳入時(shí),函數(shù)內(nèi)部不會(huì)改變變量的原數(shù)據(jù)的值
2、可變類型的數(shù)據(jù)作為函數(shù)參數(shù)傳遞時(shí),函數(shù)內(nèi)部可以改變?cè)瓟?shù)據(jù),多用與返回更多函數(shù)執(zhí)行結(jié)果
實(shí)例:寫一個(gè)函數(shù),在函數(shù)內(nèi)輸入一些整數(shù),
(1)把所有奇數(shù)放入全局列表odds中 (2)把所有的偶數(shù)放入全局的列表evens中 odds = [] evens = [] def input_number(o, e): while True: n = int(input("請(qǐng)輸入整數(shù):")) if n < 0: break # 如果n為奇數(shù)則添加列表odds中 if n % 2 == 1: o.append(n) else: # 如果n為偶數(shù)則添加到列表evens中 e.append(n) input_number(odds, evens) print(odds) # 此列表將被修改 print(evens) # 此列表也將被修改
2、函數(shù)參數(shù)的定義規(guī)則(創(chuàng)建函數(shù))
函數(shù)的缺省參數(shù):
語(yǔ)法:def 函數(shù)名(形參名1 = 默認(rèn)實(shí)參1, 形參名2 = 默認(rèn)實(shí)參2, ....):
語(yǔ)句塊
實(shí)例:以下示意函數(shù)的缺省參數(shù)
def info(name, age=1, address="未填寫"):
print(name, "住在:", address, "今年:", age, "歲")
info("莊AC", 23, "北京")
info("莊AC", 23)
說(shuō)明:(1)缺省參數(shù)必須自右至左依次存在,如果一個(gè)參數(shù)有缺省參數(shù),則其右側(cè)的所有參數(shù)都必須有缺省參數(shù)
如:def test_fn(a, b = 10, c): # 是錯(cuò)的 (2)缺省參數(shù)可以有0個(gè)或多個(gè),甚至全部都有缺省參數(shù)
3、函數(shù)的參數(shù)定義方式:
位置形參 星號(hào)元組形參 命名關(guān)鍵字形參 雙星號(hào)字典形參
(1)位置形參語(yǔ)法:
def 函數(shù)名(形參名1, 形參名2, 形參名3,......):
語(yǔ)句塊
(2)星號(hào)元組形參語(yǔ)法:
def 函數(shù)名(*元組形參名):
語(yǔ)句塊
作用:收集多余的位置傳參
實(shí)例:
def funs(*args): # args綁定一個(gè)元組,此元組內(nèi)的元素是為了剩余的位置傳參 print("施參個(gè)數(shù)是:", len(args)) print("args綁定", args) funs() # 以無(wú)參調(diào)用 funs(1, 2, 3, 4) funs("ABC", 1, 2.3, 4+5J)
(3)命名關(guān)鍵字形參語(yǔ)法:
def 函數(shù)名(*, 命名關(guān)鍵字形參):
語(yǔ)句塊
或
def 函數(shù)名(*args, 命名關(guān)鍵字形參):
語(yǔ)句塊
作用:所有的命名關(guān)鍵字形參,必須用關(guān)鍵字傳參或字典關(guān)鍵字傳參進(jìn)行參數(shù)傳遞
實(shí)例:
def fn(*, a, b): print("a的值為:", a) print("b的值為:", b) # fn(1, 2) # 錯(cuò)的,a和b 必須是用關(guān)鍵字傳參 fn(a = 1, b = 2) #必須這么傳 fn(b = 0, a = 20) fn(**{"b":200, "a":100})
def f2(*args, a, b): print("args=", args) print("a=", a) print("b=", b) f2(1, 2, 3, 4, a=100, b=200) f2(a=100, b=200)
(4)雙星號(hào)字典形參語(yǔ)法:
def 函數(shù)名(**字典形參名):
語(yǔ)句塊
作用:收集多余的關(guān)鍵字傳參(例如:dict()),通常只有一個(gè)
實(shí)例:
def func(**kwagrs): # kwagrs綁定一個(gè)字典 print("參數(shù)個(gè)數(shù):", len(kwagrs)) print("kwagrs的值為:", kwagrs) func(name="zhuang", age=35, address="dgas") func()
(5)函數(shù)參數(shù)自左至右的順序?yàn)椋?br> 位置形參, 星號(hào)元組形參, 命名關(guān)鍵字形參, 雙星號(hào)字典形參
實(shí)例:
def fn(a, b, *args, c, **kwargs): pass fn(100,200,300,400,c=5.5,d=6.6,e=7.7) fn(10,*"AB",20,*{"a":100, "b":200, "c":300})
# ----------以下函數(shù)可以接受任意的位置傳參和關(guān)鍵字傳參------------
def fn(args, *kwargs):
python函數(shù)參數(shù)支持帶星號(hào)*的非固定個(gè)數(shù)參數(shù),如:
def getInfos(msg,*users): for u in users: print(u)
在調(diào)用時(shí),可以往users傳入一個(gè)元組或列表,如果傳入的列表或元組前帶星號(hào),剛傳入后會(huì)自動(dòng)拆包。具體的不同用法有不同的效果,如下:
1、不定形參傳入元組。
getInfos("msg",("aa","bb") )
輸出:
("aa", "bb")
2、不定形參傳入帶星元組。
getInfos("msg",*("aa","bb") )
輸出:
aa bb
3、不定形參傳入列表。
getInfos("msg",["aa","bb"] )
輸出:
["aa", "bb"]
光看結(jié)果可能像是列表?。。。。。。。。。。。。〉鋵?shí)返回的就是一個(gè)元組
可通過(guò)以下代碼進(jìn)行驗(yàn)證:
#!/usr/bin/python3 def getInfos(msg,*users): users[0]="hh" for u in users: print(u) a = ["aa","bb"] getInfos("msg",a )
結(jié)果:
Traceback (most recent call last): File "/tmp/653879115/main.py", line 7, in getInfos("msg",a ) File "/tmp/653879115/main.py", line 3, in getInfos users[0]="hh" TypeError: "tuple" object does not support item assignment exit status 1
這表明是一個(gè)元組。
4、不定形參傳入帶星列表。
getInfos("msg",*["aa","bb"] )
輸出 :
aa bb
5、直接傳入多個(gè)值。
getInfos("msg", "aa","bb")
輸出:
aa額外部分二:
看如下例子:
def singalStar(common, *rest): print("Common args: ", common) print("Rest args: ", rest)
第一種方式,星號(hào)(*)參數(shù)不傳參:
singalStar("hello") #Common args: hello #Rest args: ()
第二種方式,傳多個(gè)值(個(gè)數(shù)大于或等于函數(shù)定義時(shí)的參數(shù)個(gè)數(shù)):
singalStar("hello", "world", 000) #Common args: hello #Rest args: ("world", 0)
不難看出,上述方式中,星號(hào)參數(shù)把接收的參數(shù)合并為一個(gè)元組。
第三種方式,竟然星號(hào)參數(shù)把接收的參數(shù)作為元組,那么我們直接傳元組類型的值:
singalStar("hello", ("world", 000)) #Common args: hello #Rest args: (("world", 0),)
沒錯(cuò),你沒看錯(cuò),傳遞的元組值作為了星號(hào)參數(shù)的元組中的一個(gè)元素。
第四種方式,但是有時(shí)候我們想把元組值就作為星號(hào)參數(shù)的參數(shù)值,那么該怎么辦呢?好辦,在元組值前加上“”即可,不過(guò)此時(shí),就不能在加了“”的元組后,追加任何值了。
singalStar("hello", *("world", 000))
singalStar("hello", *("world", 000), "123") #error Common args: hello Rest args: ("world", 0)3.帶兩個(gè)星號(hào)(*)的函數(shù)參數(shù)
帶兩個(gè)星號(hào)(*)的函數(shù)定義如下:
def doubleStar(common, **double): print("Common args: ", common) print("Double args: ", double)
第一種方式,星號(hào)(*)參數(shù)不傳值:
doubleStar("hello")
Common args: hello Double args: {}第二種方式,傳多個(gè)參數(shù)(個(gè)數(shù)大于或等于函數(shù)定義時(shí)的參數(shù)個(gè)數(shù))。但是,這和單星號(hào)參數(shù)傳值方式肯定不一樣,否則,不就亂套了嗎。
doubleStar("hello", "Test", 24) #error
doubleStar("hello", x = "Test", y = 24)
不難發(fā)現(xiàn),此時(shí)必須采用第一節(jié)的默認(rèn)值傳參的“args = value”的方式。同時(shí),“=”前的字段成了字典的鍵,“=”后的字段成了字典的值。即,雙星號(hào)參數(shù)接收的參數(shù)作為字典。
第三種方式,有時(shí)候我們想把字典值就作為星號(hào)參數(shù)的參數(shù)值,那么該怎么辦呢?同單星號(hào)參數(shù),在字典值前加上“**”,同時(shí)其后不能添加任何值。
#doubleStar("hello", **{"name": "Test", "age": 24}, {"name": "Test2", "age": 24}) #error #doubleStar("hello", {"name": "Test", "age": 24}) #error doubleStar("hello", **{"name": "Test", "age": 24}) #Common args: hello #Double args: {"name": "Test", "age": 24}
在有些情況下,單星號(hào)函數(shù)參數(shù)和雙星號(hào)函數(shù)參數(shù)是一起使用的,定義如下:
def singalAndDoubleStar(common, *single, **double): print("Common args: ", common) print("Single args: ", single) print("Double args: ", double)
4.總結(jié)
默認(rèn)值函數(shù)參數(shù)。這種函數(shù)定義時(shí),第一個(gè)有默認(rèn)值的參數(shù)后的每一個(gè)參數(shù)都必須提供默認(rèn)值。傳參時(shí),可以直接傳參,也可以以“默認(rèn)值參數(shù)名=value”的形式傳參。 單星號(hào)函數(shù)參數(shù)。單星號(hào)函數(shù)參數(shù)接收的參數(shù)組成一個(gè)元組。 雙星號(hào)函數(shù)參數(shù)。雙星號(hào)函數(shù)參數(shù)接收的參數(shù)組成一個(gè)字典。
完整的代碼如下:
def singalStar(common, *rest): print("Common args: ", common) print("Rest args: ", rest) def doubleStar(common, **double): print("Common args: ", common) print("Double args: ", double) def singalAndDoubleStar(common, *single, **double): print("Common args: ", common) print("Single args: ", single) print("Double args: ", double) def defaultValueArgs(common, defaultStr = "default", defaultNum = 0): print("Common args", common) print("Default String", defaultStr) print("Default Number", defaultNum) if __name__ == "__main__": defaultValueArgs("Test") defaultValueArgs("Test", "default", defaultNum = 1) singalStar("hello") singalStar("hello", "world", 000) singalStar("hello", ("world", 000)) singalStar("hello", ("world", 000), {123: 123}) singalStar("hello", *("world", 000)) # singalStar("hello", *("world", 000), "123") #error doubleStar("hello") doubleStar("hello", x = "Test", y = 24) doubleStar("hello", **{"name": "Test", "age": 24}) # doubleStar("hello", {"name": "Test", "age": 24}) #error singalAndDoubleStar("hello") singalAndDoubleStar("hello", "world", 000) singalAndDoubleStar("hello", "world", 000, {"name": "Test", "age": 24}) singalAndDoubleStar("hello", "world", 000, **{"name": "Test", "age": 24}) singalAndDoubleStar("hello", ("world", 000), {"name": "Test", "age": 24}) # singalAndDoubleStar("hello", *("world", 000), {"name": "Test", "age": 24}) #error singalAndDoubleStar("hello", *("world", 000), **{"name": "Test", "age": 24})
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/45069.html
摘要:上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)內(nèi)置函數(shù)返回對(duì)象的長(zhǎng)度元素個(gè)數(shù)。對(duì)表示單個(gè)字符的字符串,返回代表它碼點(diǎn)的整數(shù)。上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù) 上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---3、內(nèi)置函數(shù)(G-H-I-J-K)下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---5、內(nèi)置函數(shù)(P-K-R) 內(nèi)置函數(shù): showImg(https://segmentfault.com...
摘要:繼續(xù)講述更多的的內(nèi)置函數(shù)。傳遞以切換緩沖關(guān)閉僅允許在二進(jìn)制模式下,選擇行緩沖僅在文本模式下可用,并且的整數(shù)以指示固定大小的塊緩沖區(qū)的大小以字節(jié)為單位。啟動(dòng)內(nèi)置的幫助系統(tǒng)此函數(shù)主要在交互式中使用。 繼續(xù)講述更多的Python的內(nèi)置函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000019193976); IO操作 input([p...
摘要:這里就可以看到我們需要找的參數(shù)了,但是這里已經(jīng)生成了,我們可以直接查看右邊的調(diào)用棧經(jīng)過(guò)多次查看,可以很容易就發(fā)現(xiàn)這個(gè)地方有點(diǎn)東西,立即下斷點(diǎn)這時(shí)我們可以先去掉斷點(diǎn),然后刷看查看,獲取不斷點(diǎn)下一個(gè)斷點(diǎn)直到運(yùn)行結(jié)束再滑動(dòng)到下一頁(yè)即可。 今天繼續(xù)帶來(lái)破解拼多多的 anti_content 參數(shù)破解,代碼已經(jīng)放在github上:https://github.com/SergioJune...(...
摘要:這里就可以看到我們需要找的參數(shù)了,但是這里已經(jīng)生成了,我們可以直接查看右邊的調(diào)用棧經(jīng)過(guò)多次查看,可以很容易就發(fā)現(xiàn)這個(gè)地方有點(diǎn)東西,立即下斷點(diǎn)這時(shí)我們可以先去掉斷點(diǎn),然后刷看查看,獲取不斷點(diǎn)下一個(gè)斷點(diǎn)直到運(yùn)行結(jié)束再滑動(dòng)到下一頁(yè)即可。 今天繼續(xù)帶來(lái)破解拼多多的 anti_content 參數(shù)破解,代碼已經(jīng)放在github上:https://github.com/SergioJune...(...
摘要:函數(shù)式編程與面向?qū)ο缶幊瘫磉_(dá)式函數(shù)柯里化高階函數(shù)之劍什么是表達(dá)式例子定義表達(dá)式是一個(gè)匿名函數(shù),表達(dá)式基于數(shù)學(xué)中的演算得名,直接對(duì)應(yīng)于其中的抽象,是一個(gè)匿名函數(shù),即沒有函數(shù)名的函數(shù)。 函數(shù)式編程與面向?qū)ο缶幊蘙1]: Lambda表達(dá)式 函數(shù)柯里化 高階函數(shù).md 之劍 2016.5.2 11:19:09 什么是lambda表達(dá)式 例子 For example, in Lisp the...
閱讀 1565·2021-11-25 09:43
閱讀 2349·2019-08-30 15:55
閱讀 1474·2019-08-30 13:08
閱讀 2687·2019-08-29 10:59
閱讀 825·2019-08-29 10:54
閱讀 1597·2019-08-26 18:26
閱讀 2559·2019-08-26 13:44
閱讀 2663·2019-08-23 18:36