成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

初學(xué)python,調(diào)用固定參,不固定參函數(shù)遇到的問(wèn)題(持續(xù)更新)

bingo / 703人閱讀

摘要:即,雙星號(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)

Common args: hello Double args: {"y": 24, "x": "Test"}

不難發(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

相關(guān)文章

  • Python標(biāo)準(zhǔn)庫(kù)---4、內(nèi)置函數(shù)(L-M-N-O)

    摘要:上一篇文章標(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...

    MartinHan 評(píng)論0 收藏0
  • python基礎(chǔ)教程:內(nèi)置函數(shù)(二)

    摘要:繼續(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...

    xiaodao 評(píng)論0 收藏0
  • 拼多多搜索數(shù)anti_content怎么破

    摘要:這里就可以看到我們需要找的參數(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...(...

    everfight 評(píng)論0 收藏0
  • 拼多多搜索數(shù)anti_content怎么破

    摘要:這里就可以看到我們需要找的參數(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...(...

    tulayang 評(píng)論0 收藏0
  • 函數(shù)式編程與面向?qū)ο缶幊蘙1]: Lambda表達(dá)式 函數(shù)柯里化 高階函數(shù)

    摘要:函數(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...

    張金寶 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<