python全域性引數與區域性引數
阿新 • • 發佈:2018-12-25
一:全域性引數與區域性引數的典型舉例
①:在函式外定義name並在函式內定義name
>>> name='louis' >>> def fun(): name='wedi' print(name) >>> fun() wedi >>> print(name) louis >>>
②:在函式外定義name並在函式內直接引用
>>> name='louis' >>> def fun(): print(name) >>> fun() louis>>> print(name) louis
由上第一個例子可知,函式雖然對name重新賦值,但並沒有覆蓋函式前已經定義了的name,故函式內的name為區域性引數,由第二個例子可知全域性引數可被函式直接引用。綜上可知,函式呼叫的過程為,先查詢區域性內是否定義,如有則直接使用,否則向上一級查詢。直至找到為止,且區域性重新賦值後,該值只能在函式內使用,並不影響全域性引數。
二:就要區域性修改,同時全域性也跟著變
>>> name='louis' >>> def fun(): global name name='wedi' print(name) >>> fun() wedi >>> print(name) wedi
由上可知,只需要加global關鍵字,name就是全域性變數。同時需要注意的是,name='wedi',不可在global關鍵字前。
三:在函式內對全域性可變變數追加與刪除
>>> name=['louis','james'] >>> def fun(): name.append('barry') print(name) >>> fun() ['louis', 'james', 'barry'] >>> print(name) ['louis', 'james', 'barry']
其實變數就是記憶體的一個地址的指向名稱,當該記憶體地址內的內容為可變時,區域性變數就可修改,但記憶體指向任然不變;當記憶體地址指向的內容為不可變時,區域性變數的賦值,就是在記憶體裡重新開拓記憶體塊儲存值,但函式執行完畢,變數的記憶體指向將重新指向全域性變數的記憶體地址。