python使用多程序時,全域性變數改了,為什麼在函式a中值沒

2021-04-14 05:53:12 字數 5124 閱讀 1055

1樓:反翽葚讛笀仕藖

在子程序引用宣告變數的模組,然後直接用.引用就更新了

用python的tkinter中的按鈕,繫結的事件如何更改全域性變數的問題

2樓:匿名使用者

from tkinter import *def changestringvar():

a.set("changed!")

print(a.get()) ## 在這print a.get()就能列印在控制檯裡面了

root=tk()

a=stringvar()

button=button(root,text='change',command=changestringvar)

label=label(root,textvariable=a)button.pack()

label.pack()

print(a.get()) ## 這個時候列印出來內的還沒容變化呢

mainloop()

3樓:匿名使用者

我覺得可以設定一個全域性變數,儲存a值,changestringvar中從新設定下就可以了吧

python裡 列表是不是不像全域性變數,會在函式中被改變 200

4樓:育知同創教育

我覺得是,列表是個一種資料結構,而100是個整數型別的資料,其值是存在在記憶體裡,呼叫函式可以改變資料結構,但是改變不了記憶體裡的值,你可以試下改變列表裡的值。

python中在哪些情況下必須使用global來宣告全域性變數

5樓:天天不看

以下是一個多執行緒的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

6樓:育知同創教育

你的問題中已經說了啊!就是當它作為全域性變數的時候!

舉個例子來說,當你有一個引數在一個方法中會被改變,如果你希望把這個改變給積累下來,而不是每一次都是從頭開始變化的話,那麼這個引數就需要宣告為全域性變數

7樓:匿名使用者

當你在一個程式中用了它給它賦值,並且要用賦值後的它,那麼就必須要global了。本來它只是local的引用和賦值,不會影響其他程式的使用,但global之後就會影響程式外的值

8樓:穰柔欒為

一個多執行緒的python**片段,其中的x,l都是全域性變數,但在threadcode()函式中只宣告瞭global

x沒有global

l。完整的**是可以成功執行,但是把globalx註釋掉後就會報錯。

python 中怎麼對一個全域性的圖變數在函式中進行值修改 5

9樓:天蠍神經俠侶

為了幫助網友解決「python 中怎麼對一個全域性的圖變數在」相關的問題,中國學網通過網際網路對「python 中怎麼對一個全域性的圖變數在」相關的解決方案進行了整理,使用者詳細問題包括::

g..比如

import networkx as nxg=nx...graph()

定義一個全域性變數

然後在定義一個函式

def xx()

global g

if ....,具體解決方案如下:

解決方案1:

global g 去掉 試試

g=nx.graph() 已經定義成全域性變數

10樓:往往

去掉global g

global 實在有區域性變數和全域性變數重名使用的,聲名成global 表明是函式外聲名的那個而不是函式內哪一個

11樓:匿名使用者

global g 去掉 試試

g=nx.graph() 已經定義成全域性變數

python中怎麼定義全域性變數

12樓:匿名使用者

複製**

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]

複製**

結果同上

列表可以比肩簡單的實現,學習之。

13樓:唯美逛

在python中,全域性變數一般有兩種使用方式: 第一種:是在一個單獨的模組中定義好,然後在需要使用的全域性模組中將定義的全域性變數模組匯入。

第二種:直接在當前的模組中定義好,然後直接在本模組中通過global宣告

14樓:士飛薇武鈞

接下來,我們把值2賦給x。x是函式的區域性變數。所以,當我們在函式內改變x的值的時候,在主塊中定義的x不受影響。

在最後一個print語句中,我們證明了主塊中的x的值確實沒有受到影響。

使用global語句

如果你想要為一個定義在函式外的變數賦值,那麼你就得告訴python這個變數名不是區域性的,而是

全域性的。我們使用global語句完成這一功能。沒有global語句,是不可能為定義在函式外的變數賦值的。

你可以使用定義在函式外的變數的值(假設在函式內沒有同名的變數)。然而,我並不鼓勵你這樣做,並且你應該儘量避免這樣做,因為這使得程式的讀者會不清楚這個變數是在**定義的。使用global語句可以清楚地表明python函式變數是在外面的塊定義的。

python問題 在函式內使用全域性變數的時什麼時候需要加global,什麼時候不用?

15樓:自我程式設計

global是用於宣告全域性

變數。當你的函式中變數有賦值語句,而這個變數名又剛好同全域性變數一樣,這時候,如果你希望用的是全域性變數就要加global,反之函式就會建立自己的區域性變數。

簡單說:

函式內使用全域性變數,只要函式內沒有使用這個變數名來做賦值語句,就不需要加global。

socket多程序併發伺服器怎樣實現預先建立幾個程序

windows的網路編抄程我不熟悉,我只瞭解襲linux網路程式設計,bai不過我想原理應du該是互通的。在linux中大致zhi思路dao是,由主程序完成listen監聽操作之後,就開始預先派生子程序fork操作,然後在子程序的無限迴圈中accpet等待客戶端來連線。int main 具體你可以參...

linux下系統程式設計,多程序間資料共享,即共享變數

另外,你要知道只用共享記憶體是不互斥的,你必須結合訊號量一起使用才能防止互斥問題的出現。如果你共享的只是一個整形變數可能問題不大,因為對頁面對齊的整形變數的讀寫都是原子操作,但如果你共享的是個複雜的結構體就得小心了。簡單的實現,沒有新增同步機制,回頭再新增上去,而且,我是在不同終端裡面寫的,你可以把...

怎樣使用python訪問mongodb

安裝驅復動pymongo 輸入命令 制pip install pymongo 直接使用驅動 orm框架 flask mongoengine 輸入命令 pip install flask mongoengine 使用介紹 建立連線 切換資料庫 獲取collection db和collection都是延...