您好,登錄后才能下訂單哦!
// 函數使用期間:變量的作用域一定要注意,主要體現在 1. 變量作用域內是否被定義 2. 可變對象傳參是否會被修改
概念:內存中變量名和對象的對應關系 // 字典
// 每個命名空間都是獨立的存在,可以存在相同名字的變量
分類:
1. 局部命名空間:函數所擁有的命名空間,記錄了函數中定義的變量、入參等
2. 全局命名空間:模塊級的命名空間 // 模塊加載時創建
3. 內置命名空間:放置內置函數和異常 // 任何地方都可以使用
生命周期:
1. 函數調用時創建、執行結束或拋異常刪除
2. 模塊加載時創建,一直在python解釋器退出
3. python解釋器創建時創建
*注意*
python解釋器加載期間,會加載出內置命名空間和全局命名空間,局部命名是在調用時創建,函數調用結束自動退出。
作用域:針對變量,指的是變量的可用范圍 // 其實作用域就是指的命名空間內變量的作用范圍
分類:
只有函數、類、模塊有作用域,代碼塊沒有作用域
// 變量查找范圍 LEGB
1. 局部作用域
2. 嵌套作用域
3. 全局作用域
4. 內置作用域
兩個特殊參數:
1. global // 使得內部作用域內的變量可以修改全局變量
2. nolocal // 使用內部作用域內的變量可以修改嵌套作用域內的變量
工廠函數和嵌套作用域 // 內層函數都是可以記住頂層函數的狀態
"""
def func():
x = 1
def action():
x = 1
pass
return action // 此處的action函數會記住外層函數func的變量
"""
可變對象傳參和不可變對象傳參
1. 不可變對象:值傳遞,內部不可修改
2. 可變對象:指針傳遞,內部可以修改
避免可變對象傳參的修改
1. 調用時拷貝,避免在函數內部修改外部可變對象
func(a,b[:])
2. 函數內部進行拷貝
func(a,b):
b = b [:]
可變參數類型
# 函數頭部:收集任意數量的參數
*args ==> args會是一個元祖
**args ==> args會是一個字典
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已經移到內置命名空間里面
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。