python函數詳解

結構:

    def  函數名():

        函數體


執行:

    函數名()


返回值:

    return

    一,函數中,遇到return終止函數

    二,返回值,返回給了函數的調用者:函數名()

    return單個值,返回單個值

    return多個值,返回一個由這多個值組成的元祖

    

函數傳參:

實參角度:

    位置參數:從前至後一一對應

    關鍵字參數:一一對應,不用按照順序

    混合參數:關鍵字參數一定要在位置參數的後面

形參角度:

    位置參數:按照順序,一一對應

    默認參數:如果不傳參則使用默認參數,傳參則使用傳入參數,常用的會設置默認參數

動態參數(萬能參數):

    *args接收全部位置參數,聚合爲元祖 **kwargs接收全部關鍵字參數,聚合爲字典

    函數調用時,可迭代對象前加*,代表函數打散

    *args,默認參數,**kwargs順序

函數的進階:

    名稱空間:存儲的是全局(py文件)的變量與值的對應關係

    臨時名稱空間:當函數執行時,會在內存中臨時開闢一個空間,此空間記錄函數中變量與值的對應關係,隨着函數的結束,臨時名稱空間而關閉

    解釋:

Python代碼運行的時候遇到函數是怎麼做的,從Python解釋器開始執行之後,就在內存中開闢裏一個空間,每當遇到一個變量的時候,就把變量名和值之間對應的關係記錄下來,但是當遇到函數定義的時候,解釋器只是象徵性的將函數名讀如內存,表示知道這個函數存在了,至於函數內部的變量和邏輯,解釋器根本不關心。

  等執行到函數調用的時候,Python解釋器會再開闢一塊內存來儲存這個函數裏面的內容,這個時候,才關注函數裏面有哪些變量,而函數中的變量回儲存在新開闢出來的內存中,函數中的變量只能在函數內部使用,並且會隨着函數執行完畢,這塊內存中的所有內容也會被清空。

我們給這個‘存放名字與值的關係’的空間起了一個名字-------命名空間。

代碼在運行伊始,創建的存儲“變量名與值的關係”的空間叫做全局命名空間;

在函數的運行中開闢的臨時的空間叫做局部命名空間。

python中的空間:

    全局名稱空間

    臨時(局部)名稱空間

    內置名稱空間:len print 等內置函數

   加載順序:內置名稱空間-->全局名稱空間-->函數執行時:臨時名稱空間    

作用域:

    全局作用域:內置名稱空間 全局名稱空間

    局部作用域:臨時(局部)名稱空間

   取值順序:臨時(局部)名稱空間-->全局命名空間-->內置命名空間

    取值順序滿足就近原則

image.png

函數坑:

    取值:局部只能引用全局的變量但是不能修改,修改會報錯

    global: 1,可以修改全局變量 2,在局部空間聲明全局變量

    nonlocal: 1,不能操作全局變量 2,在局部作用域中,對父級作用域(或者更外層作用域非全局作用域)的變量進行引用和修改,並且引用的哪層,從那層及以下此變量全部發生改變 3,子名稱空間只能引用父級空間的變量,但是不能修改

image.png

image.png

函數的嵌套:

    程序執行到哪裏,只要遇到函數名(),就執行

image.png

image.png

函數名的運用:

直接打印函數名,返回函數內存地址

函數名可以作爲函數的參數

函數名可以作爲函數的返回值

image.png

函數可以作爲容器類型的元素


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章