1樓:先生你的shi醬
不是全域性的。如果你只是想在函式內弄乙個全域性變數,那麼global可以很好地解決問題,但是如果是陣列的話,你可以這樣:先在函式外定義乙個空列表(陣列),然後再在函式內修改它,這樣就是全域性的啦!
python中在哪些情況下必須使用global來宣告全域性變數
2樓:天天不看
以下是乙個多執行緒的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
3樓:育知同創教育
你的問題中已經說了啊!就是當它作為全域性變數的時候!
舉個例子來說,當你有乙個引數在乙個方法中會被改變,如果你希望把這個改變給積累下來,而不是每一次都是從頭開始變化的話,那麼這個引數就需要宣告為全域性變數
4樓:匿名使用者
當你在乙個程式中用了它給它賦值,並且要用賦值後的它,那麼就必須要global了。本來它只是local的引用和賦值,不會影響其他程式的使用,但global之後就會影響程式外的值
5樓:穰柔欒為
乙個多執行緒的python**片段,其中的x,l都是全域性變數,但在threadcode()函式中只宣告了global
x沒有global
l。完整的**是可以成功執行,但是把globalx註釋掉後就會報錯。
python怎麼在具體函式中宣告全域性變數
6樓:月黑風高殺人區
在乙個函式中用global宣告乙個變數,在函式外是可以呼叫的,
但是在另外乙個函式中就無法使用(我本地測試是無法使用,不知道是不是這樣),
要想所有函式都能使用,只能在函式外定義了
python函式裡的陣列如何在函式外呼叫出來
7樓:草原上之狼
使用返回copy
值的方法有兩種:
可以直接把呼叫的函式作為變數使用
可以用呼叫函式給乙個變數賦值
第一種情況見如下例子:
l = [1,2,3,4,5]
def add_element(list, element):
return list
print add_element(l, 6)# >>> [1,2,3,4,5,6]
print add_element(l, 6)[5]# >>> 6
第二種情況:
l1 = add_element(l, 6)print l1
# >>> [1,2,3,4,5,6]
print l1[5]
# >>> 6
注意: 以上例子都是應用於python 2.x
8樓:匿名使用者
python中有個方法叫全域性變數,你去查查 global 的用法
python 在函式裡面定義的變數,在外面就不能用了?我不是很想用global
9樓:匿名使用者
嚴格的說,象你這麼用是絕對屬於沒有定義的。
不過有時候又可以是因為,如果你在程式開頭函式前面定義一些變數,原則上它會自動變成global的。 除非你另外啟執行緒,或者是有可能有與它重名的變數,否則可以直接在函式體內使用,當然也可以在後面的語句中使用。
函式式程式設計要記著ipo這個準則。就是每個函式最好都是有輸入input有輸出output。函式體就是處理process。
盡量不要使用全域性變數,也不要使用預設值。乙個正規的做法是這樣:
def example(a):
a=0return a
a=1print example(a)
這是乙個標準用法,你就不用為global變數頭痛了。
10樓:智應
注意縮排對齊
def example():
a = 0
print a
while, for也是一樣,沒有大括號所以對齊決定**是函式或迴圈的結束
11樓:匿名使用者
要注意變數的作用域。
你可以def example():
a = 0
return a
print example()
python問題 我想建立乙個乙個引數的函式:引用乙個全域性變數作為引數,然後在這個函式裡面這個全域性 20
12樓:bella_鑫
全域性變數 不可以作為形參。也就是說 他不能被函式引用
可以參考一下這個**的回答:網頁鏈結
13樓:匿名使用者
給你寫一小段**。
import os,sys,time,tracebackglobal something_count_as_global #something_count_as_global = 3 #init the value
def call_many_times():
global something_count_as_global #this declare is important
something_count_as_global +=1def test():
global something_count_as_globalfor i in range(10):
call_many_times()
print something_count_as_global #expected, 3, 4, 5, ...12
if __name__=="__main__":
test()
python怎麼在具體函式中宣告全域性變數
在乙個函式中用global宣告乙個變數,在函式外是可以呼叫的,但是在另外乙個函式中就無法使用 我本地測試是無法使用,不知道是不是這樣 要想所有函式都能使用,只能在函式外定義了 python中,如何把乙個在函式內部定義的變數變為global變數 嚴格的說,象你這麼用是絕對屬於沒有定義的。不過有時候又可...
請問下python中的工廠函式和內建函式他們兩個
定義不同啊。內建函式應該是不需要import就可以使用的函式。工廠不是個函式,是個類。工廠類這要從 設計模式 說起,工廠模式。但是用起來,至少在python中,工廠模式的函式或者是類,與原來的用法沒有什麼區別。只是對於程式設計師來說,擴充套件更容易些。目前就沒有感覺差別。這些 基本 內建 之類的名詞...
若有以下陣列定義和函式呼叫,則函式fun的原型是
函式fun的原型為 void fun int p 4 或者void fun int p 4 因為,a的型別為 int 3 4 它 等價於 int 4 也等價於 int 4 設在主函式中有以下定義和函式呼叫語句,且 fun 函式為 void 型別 請寫出 fun 函式的 void fun double...