1樓:可靠的我心我在
def func():
global x
print 'x:',x
x = 2
print 'change local x to:',xdef func1(x):
print 'x:',x
x = 2
print 'change local x to:',x---執行這三句話----------
x=10
func()
func1(x)
--在把順序換一哈執行這三句話-
x=10
func1()
func2(x)
你就發先 得到的結果不一樣了
python中global的作用是什麼?
2樓:我愛
def func():
global x
x=3return x
f=func()
print x
一般多用在函式內,宣告變數的作用域為全域性作用域。
如例子中的x,如果不加global,則作用域僅為func()函式內部,print x時,會報錯;
加了global後,函式例項化後,就可以在函式外部直接訪問x了。
3樓:匿名使用者
告訴直譯器,後面這個物件是全域性的物件,不是區域性的。
python中在哪些情況下必須使用global來宣告全域性變數
4樓:天天不看
以下是一個多執行緒的python**片段,其中的x,l都是全域性變數,但在threadcode()函式中只宣告瞭global x沒有global l。完整的**是可以成功執行,但是把global x註釋掉後就會報錯。這是為什麼,lock物件比較特殊嗎?
[python] view plain copy
import threading, time, sys
x = 50
l = threading.lock()
def threadcode():
global x
l.acquire()
print 'thread %s invoked.' % threading.currentthread().getname()
try:
print 'thread %s running.' % threading.currentthread().getname()
x = x + 50
print 'thread %s set x to %d.' % \
(threading.currentthread().getname(), x)
finally:
l.release()
......
推廣一下,就成了在什麼情況下必須使用global宣告全域性變數的問題。這段**不用在函式中宣告global x也可以列印出x的值
[python] view plain copy
x = 20
def getx():
print x
getx()
在segmentfault上提問,得到了這樣的回答
[plain] view plain copy
對於python2而言,對於一個全域性變數,你的函式裡如果只使用到了它的值,而沒有對其賦值(指a = ***這種寫法)的話,就不需要宣告global。相反,如果你對其賦了值的話,那麼你就需要宣告global。宣告global的話,就表示你是在向一個全域性變數賦值,而不是在向一個區域性變數賦值。
這樣一來就清楚了。原因想來應該是這樣,如果在函式內對一個全域性變數賦值而沒有提前宣告的話,它會被當成一個與全域性變數同名的區域性變數,像這樣
[python] view plain copy
x = 20
def getx():
x = 50
print x
getx()#print 50
所以如果把第一段**中的global x註釋掉,執行到x = x + 50就報錯,因為這裡的x既不是全域性變數,也沒有作為區域性變數被初始化。而對於l,因為它是一個物件,呼叫物件成員函式和訪問普通變數的值一樣,所以也不需要事先宣告其為全域性變數,就像下面這樣。
[python] view plain copy
class a:
def __init__(self, x):
self.x = x
def setx(self, x):
self.x = x
a = a(50)
def func():
a.setx(20)
print a.x
func()#print 20
5樓:育知同創教育
你的問題中已經說了啊!就是當它作為全域性變數的時候!
舉個例子來說,當你有一個引數在一個方法中會被改變,如果你希望把這個改變給積累下來,而不是每一次都是從頭開始變化的話,那麼這個引數就需要宣告為全域性變數
6樓:匿名使用者
當你在一個程式中用了它給它賦值,並且要用賦值後的它,那麼就必須要global了。本來它只是local的引用和賦值,不會影響其他程式的使用,但global之後就會影響程式外的值
7樓:穰柔欒為
一個多執行緒的python**片段,其中的x,l都是全域性變數,但在threadcode()函式中只宣告瞭global
x沒有global
l。完整的**是可以成功執行,但是把globalx註釋掉後就會報錯。
python global怎麼用
8樓:匿名使用者
*****gfile1.py*****
def bll():
global a
for i in range(100):
a = i
====gfile.py*****
import time
import threading
import gfile1
a = 0
t1 = threading.thread(target = gfile1.bll)
t1.start()
for i in range(10):
print a
time.sleep(0.1)
9樓:眩暈的白菜
在matlab中 global 的作用是將變數宣告為全域性變數。
首先我們要知道什麼是全域性變數什麼是區域性變數
一般來說我們定義的變數全部為區域性變數,即只能在特定的範圍內使用,
例如,我在第一個m檔案中定義了一個變數 change=123,當在第二個m檔案中呼叫時你會發現系統提示你change是未定義的變數。無法使用。
這時我們就需要將change 轉變為全域性變數,
在第一個m檔案中申明 change=123;gloabl change 就將change變為全域性變數了
如果要使用這個全域性變數,就可以先宣告 global change 然後就可以直接使用change變數的;
需要注意的一點 當在其他地方改變change變數的內容時,全域性變數change的內容就會改變,所以呼叫時要小心。
10樓:匿名使用者
global s = '100'
class a:
def foo():
global s
print s
11樓:匿名使用者
看這裡你會明白的:
python 中的global語句問題,幫看一下 謝謝!
12樓:匿名使用者
global只做全域性變數的宣告,而不是一般的執行語句。
拆成兩行即可:
global **t
**t+=1
python的global語句不能作用在函式內的函式嗎?
13樓:匿名使用者
也不能這麼說。
x = 10 #先叫他原始x
原始x 就是func_inner() 的x但是func_outer() 的x跟原始x和func_innter() 的x沒關係。這個是local x
你可以用id(x)檢視,會發現,inner x的id 跟func_outer 的x 的id不相等。但原始x與inner x id 一樣。
python 在函式裡面定義的變數,在外面就不能用了?我不是很想用global
14樓:匿名使用者
嚴格的說,象你這麼用是絕對屬於沒有定義的。
不過有時候又可以是因為,如果你在程式開頭函式前面定義一些變數,原則上它會自動變成global的。 除非你另外啟執行緒,或者是有可能有與它重名的變數,否則可以直接在函式體內使用,當然也可以在後面的語句中使用。
函數語言程式設計要記著ipo這個準則。就是每個函式最好都是有輸入input有輸出output。函式體就是處理process。
儘量不要使用全域性變數,也不要使用預設值。一個正規的做法是這樣:
def example(a):
a=0return a
a=1print example(a)
這是一個標準用法,你就不用為global變數頭痛了。
15樓:智應
注意縮排對齊
def example():
a = 0
print a
while, for也是一樣,沒有大括號所以對齊決定**是函式或迴圈的結束
16樓:匿名使用者
要注意變數的作用域。
你可以def example():
a = 0
return a
print example()
python3 global怎麼用?
17樓:匿名使用者
你這個是物件裡的方法共享變數,不用global.用物件屬性就可以了。
18樓:匿名使用者
global意思是
宣告全域性變數。具體使用為在函式體外宣告一個變數,然後在函式體內用global進行宣告,意思是說大家注意了,現在所有人都可以用我這個變數了,這樣在函式體內再對其變更數值時,就會將所有使用此變數的值進行同步更改,這樣別的函式體也能使用更改後的變數值了。手機答題不好寫**,具體修改你可以自己嘗試下。
python global 定義全域性變數, 解析python函式變數如何使用
19樓:匿名使用者
接下來,我們把值2賦給x。x是函式的區域性變數。所以,當我們在函式內改變x的值的時候,在主塊中定義的x不受影響。
在最後一個print語句中,我們證明了主塊中的x的值確實沒有受到影響。
使用global語句
如果你想要為一個定義在函式外的變數賦值,那麼你就得告訴python這個變數名不是區域性的,而是 全域性 的。我們使用global語句完成這一功能。沒有global語句,是不可能為定義在函式外的變數賦值的。
你可以使用定義在函式外的變數的值(假設在函式內沒有同名的變數)。然而,我並不鼓勵你這樣做,並且你應該儘量避免這樣做,因為這使得程式的讀者會不清楚這個變數是在**定義的。使用global語句可以清楚地表明python函式變數是在外面的塊定義的。
用python程式設計求1 ,用python程式設計求1 1 2 1 3 1 4 1 5 累加和,資料項小於0 1時停止
def summa summ 0 for i in range 1,100 fl 1.0 i if fl 0.1 summ fl else print the sum is summreturn sum summa 注意縮排 def iteritem limit x 1.while 1 v 1 x ...
用python畫網格用python畫一個網格
print 函式是輸出字串,所以用 print 輸出形成的 grid 其實質是具有某特定形狀的 字串 而 plt.grid 繪製出的網格是 字串 是可以用文書處理軟體 如 word 記事本等 直接編輯處理的,而 則只能用 編輯軟體 如畫筆 開啟處理。如問題所要求的最簡單的 編寫一個能畫出如下網格 g...
Python程式設計序,用python編寫程式?
python中九九乘法口訣表可以用行和列相乘的方法實現,具體 如下 for i in range 1,10 設定行的數量for j in range 1,i 1 設定列的數量,第幾行就輸出幾列 print s s s j,i,i j end 用end 引數控制換行 print 消除end 引數 py...