function(函數)中的動態參數


 

    我們可向函數傳遞動態參數,*args,**kwargs,首先我們來看*args,示例如下:

    1.show(*args)

    def show(*args):
    print(args,type(args))
    #以元組的形式向列表傳遞參數
  show(11,22,33,44,55,66)

    首先我們定義了一個函數,函數show(*args)里面的*args可以接收動態參數,這里我們接收一個元組形式的參數,我們可以向show()里面傳遞很多參數,函數默認把這些參數作為一個元組進行接收。

    2.show(**args)

    def show(**kwargs):
    print(kwargs,type(kwargs))
    #以字典的形式向函數傳遞參數
  show(k1=80,k2="alex")

    由上面代碼可以看出,**kwargs是以字典的形式接收參數的,我們知道,字典是由鍵-值對組成的,key-value,因而我們必須向里面傳入鍵-值對的參數形式才能夠接收,因此我們在里面傳入了參數k1=80,k2="alex".這樣生成了一個字典,從代碼可以看出來。

    3.show(k,*args)

    def show(k,*args):
    print(k,type(k))
    print(args,type(args))

  show([11,22],33,44,55,88)

    運行結果如下:

    [11, 22] <class 'list'>
  (33, 44, 55, 88) <class 'tuple'>

    由上面代碼可以看出,我們向函數定義了兩個參數,一個是k,一個是*args,我們知道,形參k只能接收一個對象參數,*args可以接收多個參數並且放在一個元組中,下面我們向函數傳遞了多個參數,看是如何接收的。從運行結果(1)可以看出,形參k接收了參數[11,22];而后面輸入的值傳遞給了*args,並在存放在一個列表中。

    4.show(*args,**kwargs)

    只要函數有這兩個參數那么,可以傳遞任何形式的實參進來,人當殺人,佛當殺佛,因為可以接收任意形式的參數,但是我們知道,字典必須是由鍵值對組成,傳遞的參數要滿足key=value的格式,否則會報錯。這點一定要記得,Python中默認給字典傳遞參數的方法就是鍵-值對。

  def show(*args,**kwargs):
  print(args,type(args))
  print(kwargs,type(kwargs))

  show(123,"alex",666,alex="sb",nanyang="degnzhou")
  運行結果如下:

    (123, 'alex', 666) <class 'tuple'>
  {'nanyang': 'degnzhou', 'alex': 'sb'} <class 'dict'>

    我們可以看到,前面的元素被放到了一個元組tuple中,后面的元素被放到了一個字典dict中,但是我們一定要記得,*args,一定要在**kwargs前面,不然會報錯,順序一定是單個參數,動態元組,動態字典方式。

  下面我們來看一個實例: 

    def show(*args,**kwargs):
    print(args,type(args))
    print(kwargs,type(kwargs))

  l = [11,22,33,44]
  d = {"n1":88,"alex":"sb"}
  #我們想把列表l傳遞給形參*args,把字典傳遞給形參**kwargs,看下面方式是否可以
  show(l,d)                  (1)

  #如果向實現上面功能,要進行表示,指定把哪個參數傳遞給形參*args,另一個參數傳遞給形參××kwargs
  show(*l,**d)                 (2)             

     上面代碼中,我們在(1)處直接調用參數,但是得到的結果不是我們想要的,我們想要把參數以列表或者字典的形式傳給對應的形參,那么必須標明是傳遞給哪個參數的,相當於默認參數一樣。否則只會傳遞給第一個參數*args,把列表和字典都放在同一個元組中。上面代碼的運行結果如下:

    運行結果:

    ([11, 22, 33, 44], {'alex': 'sb', 'n1': 88}) <class 'tuple'>
  {} <class 'dict'>
  (11, 22, 33, 44) <class 'tuple'>
  {'alex': 'sb', 'n1': 88} <class 'dict'>

    5.字符串中參數的情況

    (1)字符串格式化,向字符串中傳遞列表參數

    s1 = "{0} is {1}."
  result = s1.format("alex","sb")                (1)
  l = ["alex","sb"]                              (2)
  res = s1.format(*l)
  print(result)
  print(res)

    上面,我們有兩種向字符串傳遞參數的方法,方法(1)中我們直接按順序傳遞參數給s1,在方法(2)中我們指定一個列表,但是使用*args的形式給字符串s1傳遞參數。列表是有序的。

    (2)向字符串中傳遞字典形式的參數

  s1 = "{name} is {acter}."
  result = s1.format(name="alex",acter="sb")
  d = {"name":"alex","acter":"sb"}
  #向列表中傳遞字典形式的參數
  res = s1.format(**d)
  print(result)
  print(res)
  在上面代碼中,我們向字符串中傳遞了一個字典形式的參數,我們知道字典的格式,在傳遞給字符串的時候要指定我們傳遞的參數是一個字典,
因而要使用**d格式,告訴Python。
6.lambda表達式
lambda簡單表達式就是函數的簡單表示形式:
>>> func = lambda a:a+1
  >>> ret = func(99)
  >>> print(ret)
  100
在上面形式中,func是定義一個函數,lambda表示的是我們定義了一個lambad表達式,其中a代表的形參,冒號(:)后面的a+1代表表達式,對
函數進行什么樣的處理,然后把結果返回給ret這個變量,調用它的變量。省略了return。
上面形式參數可以有多個,冒號前面是參數,可以多個;冒號后面是函數體。
lambda表達式創建了形參a;函數內容a+1,並把結果返回給調用函數的變量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM