python函數進階

一,函數的參數類型
不可變類型參數:整數、字符串、元組。
fun(a)內部修改 a的值,只是修改另一個複製的對象,不會影響 a 本身。

可變類型:列表,字典。如 fun(la), 則是將 la 真正的傳過去,修改後fun外部的la也會受影響
二,命名空間
命名空間指的是保存程序中的變量名和值的地方。

命名空間的本質是一個字典, 用來記錄變量名稱和值。字典的key是變量的名稱,字典的value對於的是變量的 值。

例如 {‘name’:’zs’,’age’:10} 命名空間一共分爲三種:
局部命名空間、全局命名空間、內置命名空間

局部空間: 每個函數都有自己的命名空間,叫做局部空間,它記錄了函數的變量,包括函數 的參數 和局部定義的變量

全局空間: 每個模塊擁有它自已的命名空間,叫做全局命名空間,它記錄了模塊的變量,包 括函數、 類、其它導入的模塊。

內置名稱空間: 任何模塊均可訪問它,它存放着內置的函數和異常。 input,print,str,list,tuple…

三、作用域
作用域指的是變量在程序中的可應用範圍。 作用域按照變量的定義位置可以劃分爲4類即LEGB: Local(函數內部)局部作用域。 Enclosing(嵌套函數的外層函數內部)嵌套作用域(閉包)。 Global(模塊全局)全局作用域。
Built­in(內建)內建作用域。(指的是builtins.py模塊)

Python內層作用域訪問外層作用域時的順序: Python搜索4個作用域[本地作用域(L)之後是上一層結構中def或者lambda的本 地作用域(E),之後是全局作用域(G)最後是內置作用域(B)(即python的內置類和 函數等)] 並且在第一處能夠找到這個變量名的地方停下來。如果變量名在整個的搜索過程 中都沒有找到,Python就會報錯。

四、全局變量和局部變量
在函數中定義的變量稱爲局部變量,只在函數內部生效, 在程序一開始定義的變量稱爲全局變量,全局變量的作用域是整個程序。

五、global和nonlocal關鍵字
1、global關鍵字可以將局部變量變成一個全局變量。 格式: global 變量名稱。
2. nonlocal關鍵字可以修改外層(非全局)變量。

六、命名空間和作用域的關係
命名空間定義了在某個作用域內變量名和綁定值之間的對應關係,命名空間是鍵 值對的集合,變量名與值是一一對應關係。 作用域定義了命名空間中的變量能夠在多大範圍內起作用。

七、內置函數
由於時間問題,重點講解如下的內置函數。其他內置函數課下驗證。 Abs() 函數 max() 函數、map() 函數、filter() 函數,zip() 函數

八、匿名函數 在定義函數的時候,不想給函數起一個名字。這個時候就可以用lambda來定義 一個匿名函數

語法: 變量名= lambda 參數:表達式(block) 參數:可選,通常以逗號分隔的變量表達式形式,也就是位置參數
表達式:不能包含循環、return,可以包含if…else…

注意:
1.表達式中不能包含 循環,return
2.可以包含 if…else…語句.
3.表達式計算的結果直接返回

九、嵌套作用域和lambda lambda表達式也會產生一個新的局部作用域。在def定義的函數中嵌套labmbda 表達式,lambda表達式 能夠看到所有def定義的函數中可用的變量。

lambda表達式總結:
優點:代碼簡潔,不增加額外變量。
缺點:難於理解,降低了可讀性。 建議:不提倡使用lambda, 除非你知道自己在幹什麼。在團隊開發中, 一個良 好易讀的代碼是非常重要的,有助於提升團隊協同開發效率,減少溝通和維護成 本。

發佈了37 篇原創文章 · 獲贊 49 · 訪問量 4074
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章