【python函數】函數

// 函數使用期間:變量的做用域必定要注意,主要體如今 1. 變量做用域內是否被定義 2. 可變對象傳參是否會被修改python

1. 函數命名空間

概念:內存中變量名和對象的對應關係 // 字典
    // 每一個命名空間都是獨立的存在,能夠存在相同名字的變量

    分類:
    1. 局部命名空間:函數所擁有的命名空間,記錄了函數中定義的變量、入參等
    2. 全局命名空間:模塊級的命名空間  // 模塊加載時建立
    3. 內置命名空間:放置內置函數和異常  // 任何地方均可以使用
    生命週期:
    1. 函數調用時建立、執行結束或拋異常刪除
    2. 模塊加載時建立,一直在python解釋器退出
    3. python解釋器建立時建立

    *注意*
    python解釋器加載期間,會加載出內置命名空間和全局命名空間,局部命名是在調用時建立,函數調用結束自動退出。

2. 函數做用域

做用域:針對變量,指的是變量的可用範圍 // 其實做用域就是指的命名空間內變量的做用範圍

    分類:
    只有函數、類、模塊有做用域,代碼塊沒有做用域

    // 變量查找範圍 LEGB
    1. 局部做用域
    2. 嵌套做用域
    3. 全局做用域
    4. 內置做用域

    兩個特殊參數:
    1. global // 使得內部做用域內的變量能夠修改全局變量
    2. nolocal  // 使用內部做用域內的變量能夠修改嵌套做用域內的變量

    工廠函數和嵌套做用域  // 內層函數都是能夠記住頂層函數的狀態
    """
    def func():
                x = 1
                def action():
                        x = 1
                        pass
                return action  // 此處的action函數會記住外層函數func的變量
    """

3. 函數參數

可變對象傳參和不可變對象傳參
            1. 不可變對象:值傳遞,內部不可修改
            2. 可變對象:指針傳遞,內部能夠修改

    避免可變對象傳參的修改
            1. 調用時拷貝,避免在函數內部修改外部可變對象
            func(a,b[:])
            2. 函數內部進行拷貝
            func(a,b):
                    b = b [:]
    可變參數類型
    # 函數頭部:收集任意數量的參數
    *args ==> args會是一個元祖
    **args ==> args會是一個字典

4. lambda表達式

5. 內置函數

1. map函數
        list(map(lambda x:x + 2,[1,2,3,4])) => [3,4,5,6]  // map對序列中每一個元素執行相同的操做
    2. filter函數
        list(map(lambda x:x > 3,[1,2,3,4,5])) => [4,5]  // 返回結果爲True的元素
    3. reduce函數
        from functools import reduce
        reduce(lambda x,y:x+y,[1,2,3,4]) => 10 // python3 reduce已經移到內置命名空間裏面
相關文章
相關標籤/搜索