python之global的用法問題

2021-05-23 01:35:18 字數 5756 閱讀 3152

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...