python全局變量引用與修改過程解析
這篇文章主要介紹了python全局變量引用與修改過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
一、引用
使用到的全局變量只是作為引用,不在函數(shù)中修改它的值的話,不需要加global關(guān)鍵字。如:
#! /usr/bin/python
a = 1
b = [2, 3]
def func():
if a == 1:
print("a: %d" %a)
for i in range(4):
if i in b:
print("%d in list b" %i)
else:
print("%d not in list b" %i)
if __name__ == '__main__':
func()
輸出結(jié)果:

可以看出,無論是列表還是變量,都是可以直接引用的。
二、修改
使用到的全局變量,需要在函數(shù)中修改的話,就涉及到歧義問題,如:
#! /usr/bin/python a = 1 b = [2, 3] def func(): a = 2 print "in func a:", a b[0] = 1 print "in func b:", b if __name__ == '__main__': print "before func a:", a print "before func b:", b func() print "after func a:", a print "after func b:", b
輸出結(jié)果:

可以看出,對于變量a,在函數(shù)func中"a = 2",因?yàn)榇嬖诩瓤梢员硎疽萌肿兞縜,也可以表示創(chuàng)建一個新的局部變量的歧義,所以python默認(rèn)指定創(chuàng)建一個新的局部變量來消除這一歧義,但對于列表b而言,"b[0] = 1"不存在這種歧義,因此直接修改了全局變量,但是如果改成了"b = [3, 4]",那么b也會變成局部變量。特別地,當(dāng)在func中a = 2之前加入"if a == 1:"這一語句,腳本運(yùn)行出錯,因?yàn)檫@一語句引入了全局變量,導(dǎo)致了"a = 1"這一語句無法創(chuàng)建同名的局部變量。
因此,需要修改全局變量a,可以在"a = 2"之前加入global a聲明,如:
#! /usr/bin/python a = 1 b = [2, 3] def func(): global a a = 2 print "in func a:", a b[0] = 1 print "in func b:", b if __name__ == '__main__': print "before func a:", a print "before func b:", b func() print "after func a:", a print "after func b:", b
輸出結(jié)果:

結(jié)論:引用全局變量,不需要golbal聲明,修改全局變量,需要使用global聲明,特別地,列表、字典等如果只是修改其中元素的值,可以直接使用全局變量,不需要global聲明。結(jié)論:引用全局變量,不需要golbal聲明,修改全局變量,需要使用global聲明,特別地,列表、字典等如果只是修改其中元素的值,可以直接使用全局變量,不需要global聲明。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python共享引用(多個變量引用)示例代碼
- Python中is與==的使用區(qū)別詳解
- python游戲?qū)崙?zhàn)項(xiàng)目之童年經(jīng)典超級瑪麗
- python游戲?qū)崙?zhàn)項(xiàng)目之俄羅斯方塊的魅力
- python游戲的魅力之冒險(xiǎn)島實(shí)戰(zhàn)項(xiàng)目
- Python 多繼承中的一個詭異現(xiàn)象 既是 Father又是grandfather
- python 如何將字典寫為json文件
- 童年回憶錄之python版4399吃豆豆小游戲
- Python中優(yōu)雅使用assert斷言的方法實(shí)例
- python 基于 tkinter 做個學(xué)生版的計(jì)算器
- 聊聊Python中的@符號是什么意思
- 關(guān)于python變量的引用以及在底層存儲原理
相關(guān)文章
python+selenium識別驗(yàn)證碼并登錄的示例代碼
本篇文章主要介紹了python+selenium識別驗(yàn)證碼并登錄的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
使用Python和OpenCV進(jìn)行視覺圖像分割的代碼示例
在圖像處理領(lǐng)域,圖像分割是一項(xiàng)基礎(chǔ)且關(guān)鍵的技術(shù),它涉及到將圖像劃分為若干個具有特定屬性的區(qū)域,本文將通過一個實(shí)踐項(xiàng)目,展示如何使用Python編程語言,結(jié)合OpenCV庫,對一張玫瑰花的圖片進(jìn)行圖像分割,需要的朋友可以參考下2025-01-01
Python通過dxfgrabber庫實(shí)現(xiàn)獲取CAD信息
dxfgrabber?是一個?Python?庫,用于讀取和解析?AutoCAD?DXF(Drawing?Exchange?Format)文件,本文就來教教大家如何利用dxfgrabber庫實(shí)現(xiàn)獲取CAD信息吧2023-06-06
Python統(tǒng)計(jì)詞頻的幾種方法小結(jié)
本文主要介紹了Python統(tǒng)計(jì)詞頻的幾種方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03

