1樓:匿名使用者
有用。區域性變數在作用區域過後就沒有了。然而,全域性變數可以整個程式一直存在。並且區域性變數只能在函式沒訪問,而全域性變數可以直接訪問。
2樓:小孩子
python類裡面設定全域性變數是方便其他類直接呼叫和繼承此類的變數屬性,從而使我們的**更簡潔。
python class裡面的全域性變數問題
3樓:匿名使用者
你在ex裡面定義的oo,所以你得先執行過ex之後才能執行start。
class test:
def __init__(self,name='testa'):
self.x = 'age'
self.name = name
self.ex() #加上這個
self.start()
def ex(self):
global oo
oo = 'this is test'
def start(self):
print oo
t=test()
如果不適用全域性變數的話,你可以self.oo:
class test:
def __init__(self,name='testa'):
self.x = 'age'
self.name = name
self.ex()
self.start()
def ex(self):
self.oo = 'this is test'
def start(self):
print self.oo
t=test()
4樓:匿名使用者
因為你定義oo是在self.ex(self)這個函式裡,所以在這個函式被執行前,global裡並沒有 oo這個變數。
如果你明白這個道理就知道了怎麼去列印你的oo了。
簡單的說這樣
t=test()
t.ex()
t.start()
5樓:匿名使用者
class test:
def __init__(self,name='testa'):
self.x = 'age'
self.name = name
self.oo="this is test"
self.start()
def ex(self):
oo = 'this is test'
def start(self):
print oo
test()
python 全域性變數怎麼用
6樓:匿名使用者
在python中,全域性變數一般有兩種使用方式:
第一種:是在乙個單獨的模組中定義好,然後在需要使用的全域性模組中將定義的全域性變數模組匯入。
第二種:直接在當前的模組中定義好,然後直接在本模組中通過global宣告,然後使用
具體的方法如下所示:
第一種:
#輸出:
ps:在此種用法中,如果我們在函式tt中不使用global 宣告全域性變數solr_url,其實也可以使用,但是此時應該是作為乙個內部變數使用,由於沒有初始值,因此報錯
python查詢變數是順序是:先區域性變數,再全域性變數
#輸出:
solr_url=solr_url+'#aa'
unboundlocalerror: local variable 'solr_url' referenced before assignment
第二種:
global_list.py
global_a='hello'
global_b='world'
test.py
import global_list
def tt():
print global_list.global_a
if __name__=='__main__':
tt()
#輸出:
hello
python中怎麼定義全域性變數
7樓:匿名使用者
複製**
count = 0
def fuc(count):
print count
count += 1
for i in range(0, 10):
fuc(count)
複製**
結果是:
不是我們想要的結果。
解決之道一——全域性變數:
複製**
global a
a = 3
def fuc():
global a
print a
a = a + 1
if __name__ == "__main__":
global a
for i in range(10):
fuc()print 'hello'
print a
複製**
結果:注意要領:
**需要全域性變數,**宣告一下;但是函式千萬不要傳引數, fuc(a)是不行的。
解決之道二——列表:
複製**
a = [3]
def fuc():
print a[0]
a[0] = a[0] + 1
if __name__ == "__main__":
global a
for i in range(10):
fuc()
print 'hello'
print a[0]
複製**
結果同上
列表可以比肩簡單的實現,學習之。
8樓:唯美逛
在python中,全域性變數一般有兩種使用方式: 第一種:是在乙個單獨的模組中定義好,然後在需要使用的全域性模組中將定義的全域性變數模組匯入。
第二種:直接在當前的模組中定義好,然後直接在本模組中通過global宣告
9樓:士飛薇武鈞
接下來,我們把值2賦給x。x是函式的區域性變數。所以,當我們在函式內改變x的值的時候,在主塊中定義的x不受影響。
在最後乙個print語句中,我們證明了主塊中的x的值確實沒有受到影響。
使用global語句
如果你想要為乙個定義在函式外的變數賦值,那麼你就得告訴python這個變數名不是區域性的,而是
全域性的。我們使用global語句完成這一功能。沒有global語句,是不可能為定義在函式外的變數賦值的。
你可以使用定義在函式外的變數的值(假設在函式內沒有同名的變數)。然而,我並不鼓勵你這樣做,並且你應該盡量避免這樣做,因為這使得程式的讀者會不清楚這個變數是在**定義的。使用global語句可以清楚地表明python函式變數是在外面的塊定義的。
求問python大神,為什麼已經設定了全域性變數,還現實未定義變數? 5
10樓:匿名使用者
#你沒有
理解global的意義
markov_dicts = {}
def parse():
global markov_dicts # 以後出現的就是修改global的內容
markov_dicts["a"] = 1print(markov_dicts) # 直接呼叫def print_globvar():
print(markov_dicts) # 直接呼叫parse()
print_globvar()
你原始**裡面print的時候那個markov_dicts 還沒有定義。
>>> def a():
... global m
... m = 1
...>>> a()
>>> m
1>>> print m
1>>> def b():
... global n
... n = 2
...>>> print n
traceback (most recent call last):
file "", line 1, in
nameerror: name 'n' is not defined>>> b()
>>> n2
python的class裡全域性變數有時不能被呼叫
11樓:育知同創教育
你在ex裡面定義的oo,所以你得先執行過ex之後才能執行start。
class test: def __init__(self,name='testa'): self.
x = 'age' self.name = name self.ex() #加上這個 self.
start() def ex(self): global oo oo = 'this is test' def start(self): print oo t=test()
如果不適用全域性變數的話,你可以self.oo:
class test: def __init__(self,name='testa'): self.
x = 'age' self.name = name self.ex() self.
start() def ex(self): self.oo = 'this is test' def start(self):
print self.oo t=test()
python中為什麼類的例項方法可以直接訪問全域性變數
12樓:匿名使用者
變數查詢順序,區域性->外部->全域性
13樓:無銘
45545456 54545454
python問題 在函式內使用全域性變數的時什麼時候需要加global,什麼時候不用?
14樓:自我程式設計
global是用於宣告全域性
變數。當你的函式中變數有賦值語句,而這個變數名又剛好同全域性變數一樣,這時候,如果你希望用的是全域性變數就要加global,反之函式就會建立自己的區域性變數。
簡單說:
函式內使用全域性變數,只要函式內沒有使用這個變數名來做賦值語句,就不需要加global。
python中在哪些情況下必須使用global來宣告全域性變數
15樓:天天不看
以下是乙個多執行緒的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
有關python全域性變數和區域性變數的問題
問題不在這個pro request上,你前面的 估計有修改 process的行為。除了為列表直接賦值引用的外 修改新列表是不會改變源列表的內容的。python區域性變數和全域性變數問題 global語句宣告後,指定的變數被認為是函式外的。後面的所有操作都是在操作函式外的那個變數,雖然你是在函式內操作...
靜態全域性變數和全域性變數有什麼區別
首先兩個變數都是定義在類中的,靜態的全域性變數就是static宣告的,類可以不用new 就可以呼叫了 而且全域性變數一般是指成員變數,也叫類的屬性變數,欄位等,是需要把類new出來才能呼叫的 public class test 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性...
如何跟全域性變數動態賦值,如何跟一個全域性變數動態賦值
在呼叫一個jquery的ajax方法時我們有時會需要該方法返回一個值或者給某個全域性變數賦值,可是我們發現程式執行完後並沒有獲取到我們想要的值,這時很有可能是因為你用的是ajax的非同步呼叫async true 預設情況 如 function managecommenttext text retur...