Python 函數

函數python

說明:函數是以功能爲導向,封裝單一功能的代碼塊,可以被調用執行函數

優勢:函數可以下降代碼的重複率spa

   提升代碼的可讀性3d

函數的定義:rest

  def fun():內存

    函數體作用域

函數的調用:it

  fun()class

  函數被調用了多少次,函數就執行多少次變量

函數的返回值:

  經過return關鍵字將函數體的結果返回給函數的執行者

  return的做用:

      1. 結束函數

      2. 函數中沒有或者只有一個return 函數返回一個None給函數執行者

      3. return後面有一個值得時候,函數執行知將獲得這個值(不會改變數據類型)

      4. return後面跟多個值得時候,多個值組成元組後返回給函數執行者

函數傳參: 實際就是實參傳給形參的行爲過程

    形參:定義函數時括號中的參數,用於接收調用函數時傳過來的實參

      分類:

        位置參數  從左至右 按照順序 一一對應

        默認參數  必定要在位置參數的後面,不傳實參默認使用形參的默認參數

        動態參數

        僅限關鍵字參數

    實參:代用函數時指定的參數,用於傳給函數中的形參供函數體使用

      分類:

        位置參數  從左至又 一一對應

        關鍵字參數  一一對應

        動態參數  關鍵字參數必定要在位置參數後面 一一對應

 

函數的傳參:形參角度:第三種傳參方式。

 

動態參數:*args **kwargs

 

*args : 可以接收實參角度的全部位置參數,獲得一個元組存儲到args中

**kwargs : 接收實參角度的全部關鍵字參數,獲得一個字典存儲在kwargs中

 

# def eat(food1,food2,food3):
#     print(f'我請你吃:{food1},{food2},{food3}')
# eat('蒸羊羔','蒸熊掌','蒸鹿尾')

# 當給函數傳入的參數數目不定時,以前的傳參方式解決不了問題。
# 萬能參數,動態參數。 *args
# def eat(food1,food2,food3):
#     print(f'我請你吃:{food1},{food2},{food3}')
# eat('蒸羊羔','蒸熊掌','蒸鹿尾','燒花鴨','燒企鵝')

def eat(*args): # 將實參角度:定義一個函數時,* 全部的位置參數聚合到一個元組中。
  print(args)
  print(f'我請你吃:{args}')
eat('蒸羊羔','蒸熊掌','蒸鹿尾','燒花鴨','燒企鵝')

 

*的魔性用法

 

  • 函數中的打散和聚合

 

在函數的定義時 *起到的是聚合的做用

在函數的執行時 *起到的是打散的做用

 

  • 處理剩下的元素

    a,*b = (1, 2, 3, 4,)
    print(a, b) # 1 [2, 3, 4]
    *rest,a,b = range(5)
    print(rest, a, b) # [0, 1, 2] 3 4
    print([1, 2, *[3, 4, 5]]) # [1, 2, 3, 4, 5]

     

 

 

 

形參角度的最終順序

 

位置參數,*args,默認參數,**kwargs (僅限關鍵字參數在*args和**kwargs之間,和默認參數的位置不衝突)

 

緣由:

 

  • 動態參數*args不能放在位置參數以前,這樣位置參數就接收不到任何實參了,都被*args搶去了

  • 動態參數*args必定要在默認參數以前,由於放在默認參數後面就無法使用默認參數的默認值了

  • 動態參數**kwargs必定要放在默認參數以後,若是在默認參數以前會報錯,由於默認參數的值永遠改變不了

 

第四種傳參方式:僅限關鍵字參數

 

僅限關鍵字參數是python3x更新的新特性,他的位置要放在*args後面,kwargs前面(若是有kwargs),也就是默認參數的位置,它與默認參數的先後順序無所謂,它只接受關鍵字傳的參數

 

也能夠把它當成沒有默認值的默認參數,只接受關鍵字參數,不傳就會報錯

 

從空間角度研究函數

 

 

全局名稱空間: py文件運行時開闢的,存放的是執行的py文件(除去函數內部)的全部的變量與值(地址)的對應關係,整個py文件結束以後,纔會消失。

 

臨時(局部)名稱空間: 函數執行時,在內存中臨時開闢的一個空間,存放的函數中的變量與值的對應關係,隨着函數的結束而消失。

 

內置名稱空間:存放python解釋器爲咱們提供的名字, list, tuple, str, int這些都是內置命名空間

 

加載順序(三個空間加載到內存的順序)

 

內置命名空間(程序運行伊始加載)->全局命名空間(程序運行中:從上到下加載)->局部命名空間(程序運行中:調用時才加載

 

取值順序:(就近原則)取值順序就是引用一個變量,先從哪個空間開始引用

 

取值順序知足的就近原則,從小範圍到大範圍一層一層的逐步引用。

 

 

做用域

 

做用域就是做用範圍, 按照生效範圍來看分爲全局做用域和局部做用域

 

全局做用域:全局名稱空間,內置名稱空間。

 

局部做用域:局部名稱空間。

 

內置函數:globals,locals

 

globals(): 以字典的形式返回全局做用域全部的變量對應關係。

 

locals(): 以字典的形式返回當前做用域的變量的對應關係。

 

高階函數(嵌套函數)

 

函數的嵌套,就是一個函數中,還有函數。

相關文章
相關標籤/搜索