有關python全域性變數和區域性變數的問題

2021-03-04 04:39:56 字數 4808 閱讀 7096

1樓:

問題不在這個pro_request上,你前面的** 估計有修改 process的行為。除了為列表直接賦值引用的外 修改新列表是不會改變源列表的內容的。

python區域性變數和全域性變數問題

2樓:大話殘劍

global語句宣告後,指定的變數被認為是函式外的。後面的所有操作都是在操作函式外的那個變數,雖然你是在函式內操作的。

雖然python提供了這個功能,但是應該盡量避免這樣做,因為這使得程式的讀者會不清楚這個變數是在**定義的。

def func():

global x

print 'x is', x

x = 2

print 'changed local x to', xx = 50

func()

print 'value of x is', x執行結果是這樣的

x is 50

changed global x to 2value of x is 2

python裡面的全域性變數和區域性變數的區別小講

3樓:乙個窮人的白

自己寫就太費事了,不如基於ocr的已有專案去呼叫去封裝吧。。 python呼叫tesseract的demo,可以去看看。

python有沒有區域性變數和全域性變數的概念

4樓:老弓長

有區域性變數和全域性變數。

全域性變數:所有函式之外定義的變數。

區域性變數:函式內部定義的變數或**塊裡的變數。

全域性變數和區域性變數有什麼區別?是怎麼實現的?

5樓:匿名使用者

1、 全域性變數的作用用這個程式塊,而區域性變數作用於當前函式;

2、前者在記憶體中分配在全域性資料區,後者分配在棧區;

3、 生命週期不同:全域性變數隨主程式建立和建立,隨主程式銷毀而銷毀,區域性變數在區域性函式內部,甚至區域性迴圈體等內部存在,退出就不存在;

4、 使用方式不同:通過宣告後全域性變數程式的各個部分都可以用到,區域性變數只能在區域性使用

作業系統和編譯器通過記憶體分配的位置來知道的全域性變數分配在全域性資料段,並且在程式被執行的時候就被載入。;

編譯器通過語法詞法的分析,判斷出是全域性變數還是區域性變數。如果是全域性變數的話,編譯器在將源**翻譯成二進位制**時就為全域性變數分配好乙個虛擬位址 (windows下0x00400000以上的位址,也就是所說的全域性區),所以程式在對全域性變數的操作時是對乙個硬編碼的位址操做。

區域性變數的話,編譯時不分配空間,而是以相對於ebp或esp的偏移來表示區域性變數的位址,所以區域性變數記憶體是在區域性變數所在的函式被呼叫時才真正分配。 以彙編的角度來看:函式執行時,區域性變數在棧中分配,函式呼叫完畢釋放區域性變數對應的記憶體,另外區域性變數可以直接分配在暫存器中。

作業系統通過變數的分配位址就可以判斷出是區域性變數和全域性變數。

全域性變數、靜態全域性變數、靜態區域性變數和區域性變數的區別

6樓:匿名使用者

c++變數根據定義位置的不同,具有不同的作用域,作用域可分為6種:全域性作用域,區域性作用域,語句作用域,類作用域,命名作用域和檔案作用域。

從作用域看:

全域性變數具有全域性作用域。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包括全域性變數定義的原始檔需要用extern關鍵字再次宣告這個全域性變數。

靜態區域性變數具有區域性作用域。它只被初始化一次,自從第一次初始化直到程式與你新內閣結束都一直存在,他和全域性變數的區別在於全域性變數對所有的函式都是可見的,而靜態區域性變數只對定義自己的函式體始終可見。

區域性變數也只有區域性作用域,他是自動物件,他在程式執行期間不是一直存在,而是只在函式執行期間存在,函式的一次呼叫結束後,變數就被撤銷,其所占用的記憶體也被收回。

靜態全域性變數也具有全域性作用域,他與全域性變數的區別在於如果程式包含多個檔案的話,他作用於定義它的檔案裡,不能作用到其他檔案裡,即被static關鍵字修飾過的變數具有檔案作用域。這樣即使兩個不同的原始檔都定義了相同的靜態全域性變數,他們也是不同的變數。

從分配記憶體空間看:

全域性變數、靜態區域性變數、靜態全域性變數都在靜態儲存區分配空間,而區域性變數在棧分配空間。

全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上沒有什麼不同。區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。

而靜態全域性變數則限制了其作用域,即只在定義該變數的原始檔內有效,在同一源程式的其他原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其他原始檔中引起錯誤。

1、靜態變數會被放在程式的靜態資料儲存區里,這樣可以在下一次呼叫的時候還可以保持原來的賦值。這一點是他與堆疊變數和堆變數的區別

2、變數用static告知編譯器,自己僅僅在變數的作用域範圍內可見。這一點是他與全域性變數的區別。

從以上分析可以看出,把區域性變數改變為靜態變數後是改變了他的儲存方式,即改變了他的生存期。把全域性變數改變為靜態變數後是改變了他的作用域,限制了他的使用範圍,因此static這個說明符在不同的地方起的作用是不同的。

tips:

1、若全域性變數僅在單個檔案中訪問,則可以講這個變數修改為靜態全域性變數。

2、若全域性變數僅在單個函式中使用,則可以將這個變數修改為該函式的靜態區域性變數。

3、全域性變數、靜態區域性變數、靜態全域性變數都存放在靜態資料儲存區。

4、函式中必須要使用static變數的情況:當某函式的返回值為指標型別時,則必須是static的區域性變數的位址作為返回值,若為auto型別,則返回為錯指標。

7樓:孫映寒厚周

區域性變數

與其它三個有本質區別。

區域性變數,定義在函式內,

作用域為定義位置,到所在大括號結束。

每次執行到定義語句的時候,系統為該變數分配記憶體,當作用域結束後,記憶體被釋放。

而另外三個,都是在系統執行時就分配記憶體,在執行過程中都不會釋放,直到程式結束。

也就是說,區域性變數和其它三個,最明顯的區別:

1生命週期不同

2分配時間不同

3分配位置不同。

而另外三個,在這幾項上是相同的,之間的區別在於作用域。

全域性變數

,作用域為整個專案,不管在哪個檔案中,只要宣告後都可以使用。

靜態全域性變數,作用域為定義改變量的所在檔案。

而靜態區域性變數,作用域與普通區域性變數一樣,都是定義位置到所在大括號結束。

8樓:麼光遠抄圖

變數可以分為:全域性變數、靜態全域性變數、靜態區域性變數和區域性變數。

按儲存區域分,全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的靜態儲存區域,區域性變數存放在記憶體的棧區。

按作用域分,全域性變數在整個工程檔案內都有效;靜態全域性變數只在定義它的檔案內有效;靜態區域性變數只在定義它的函式內有效,只是程式僅分配一次記憶體,函式返回後,該變數不會消失;區域性變數在定義它的函式內有效,但是函式返回後失效。

全域性變數(外部變數)的說明之前再冠以static

就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,

靜態全域性變數當然也是靜態儲存方式。

這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,

當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。

而靜態全域性變數則限制了其作用域,

即只在定義該變數的原始檔內有效,

在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,

因此可以避免在其它原始檔中引起錯誤。

從以上分析可以看出,

把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,

限制了它的使用範圍。

static函式與普通函式作用域不同。僅在本檔案。只在當前原始檔中使用的函式應該說明為內部函式(static),內部函式應該在當前原始檔中說明和定義。

對於可在當前原始檔以外使用的函式,應該在乙個標頭檔案中說明,要使用這些函式的原始檔要包含這個標頭檔案

static全域性變數與普通的全域性變數有什麼區別:static全域性變數只初使化一次,防止在其他檔案單元中被引用;

static區域性變數和普通區域性變數有什麼區別:static區域性變數只被初始化一次,下一次依據上一次結果值;

static函式與普通函式有什麼區別:static函式在記憶體中只有乙份,普通函式在每個被呼叫中維持乙份拷貝

全域性變數和靜態變數如果沒有手工初始化,則由編譯器初始化為0。區域性變數的值不可知。

關於python的區域性變數和全域性變數怎麼區分的 40

9樓:匿名使用者

func裡面的x是引數,是區域性變數。呼叫func的時候,傳進來的值是50,這個會賦值給區域性變數x。之後func裡面的操作都是影響這個區域性的x。

全域性變數和區域性變數的區別python

10樓:梅開巖笑

函式內部的變數名如果第一次出現,且出現在=前面,即被視為定義乙個區域性變數,不管全域性域中有沒有用到該變數名,函式中使用的將是區域性變數,例如:

num = 100

def func():

num = 123

print(num)

func()

11樓:閃忠六衣

func裡面的x是引數,是區域性變數。呼叫func的時候,傳進來的值是50,這個會賦值給區域性變數x。之後func裡面的操作都是影響這個區域性的x。

關於c 全域性變數和區域性變數問題

我說得很清楚啊 動態記憶體的那塊記憶體它是在你申請後就一直存在,永遠存在 直到你釋放後或關機了就不存在了.對使用動態記憶體 乙個程式使用的記憶體一般分為4個部分 你說的函式外就失效的那部分區域叫棧區,一般函式的區域性變數存在裡面,這些變數在函式呼叫結束後就不存在了 而所謂的 動態記憶體是在 堆區,這...

靜態全域性變數和全域性變數有什麼區別

首先兩個變數都是定義在類中的,靜態的全域性變數就是static宣告的,類可以不用new 就可以呼叫了 而且全域性變數一般是指成員變數,也叫類的屬性變數,欄位等,是需要把類new出來才能呼叫的 public class test 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性...

Python類裡面設定全域性變數有什麼用嗎

有用。區域性變數在作用區域過後就沒有了。然而,全域性變數可以整個程式一直存在。並且區域性變數只能在函式沒訪問,而全域性變數可以直接訪問。python類裡面設定全域性變數是方便其他類直接呼叫和繼承此類的變數屬性,從而使我們的 更簡潔。python class裡面的全域性變數問題 你在ex裡面定義的oo...