1. 程式人生 > >python中的全域性變數和區域性變數以及可變資料型別

python中的全域性變數和區域性變數以及可變資料型別

全域性變數和區域性變數

一、區域性變數:在函式內部定義的變數,叫區域性變數

  1. 當這個函式被呼叫的時候,這個變數存在,當這個函式執行完成之後,因為函式都已經結束了,所有函式裡面定義的變數也就結束了
  2. 在一個函式中定義的區域性變數,只能在這個函式中使用,不能再其他的函式中使用

二、全域性變數:子函式外邊定的變數,叫做全域性變數

  1. 所有的函式都可以使用它的值
  2. 如果函式需要修改全域性變數的值,那麼需要在這個函式中,使用 global xxx進行說明。

如:

age = 18

def A():
    age = 100
    print(age)



def B():
    global
age age = 200 print(age) def C(): print(age) A() B() C()

輸出結果為

100
200
200

但並不是所有的全域性變數在函式中使用時都需要global宣告。這裡就要說說朋友python中所謂的“可變資料型別”和“不可變資料型別”。

可變資料型別

首先,我們需要知道在python中哪些是可變資料型別,哪些是不可變資料型別。

  • 可變資料型別,值可以改變:列表list和字典dict;
  • 不可變資料型別,值不可以改變:整型int、浮點型float、字串型string和元組tuple。

具體什麼原理這裡不做解釋,只說一下可變資料型別和不可變資料型別作為變數的不同用法。

當不可變資料型別作為全域性變數時,需要global宣告,而可變資料型別就不一定。先來看一段程式碼:

test = []
def D():
    test.append(1)
    print(test)
D()

輸出結果為:

[1]

在程式中,列表test為全域性變數,但在函式D中,沒有global宣告,就能改變,注意此時用的是.append新增值。
再來看一段程式碼:

test1 = []
def E():
    test1 = [1,2]
    print(test1)
E()
print(test1)

輸出結果為:

[1, 2]
[]

可以看出,test1的內容並沒有改變,仍然是空,這是為什麼呢?
還有:

test2 = [1,2]
def F(a):
    a += a
    print(a)
F(test2)
print(test2)

結果為:

[1, 2, 1, 2]
[1, 2, 1, 2]

這時,test2又被改變了。為什麼會這樣呢?這就牽扯到引用的問題了。

所以我覺得為了保險起見,不管是不是可變資料型別,只要作為全域性變數,最好還是加上global宣告。

相關推薦

python全域性變數區域性變數以及可變資料型別

全域性變數和區域性變數 一、區域性變數:在函式內部定義的變數,叫區域性變數 當這個函式被呼叫的時候,這個變數存在,當這個函式執行完成之後,因為函式都已經結束了,所有函式裡面定義的變數也就結束了 在一個函式中定義的區域性變數,只能在這個函式中使用,不能再其他

Python全域性變數區域性變數

當局部變數和全域性變數名字一樣時,依然是不同的變數,但是值一樣時,地址依然一樣。值不一樣時,地址不一樣,修改區域性變數,全域性變數的值依然不變,例如: num = 100 def test(): num = 99 print("區域性變數num

python變數 區域性變數全域性變數

1.類中初始化變數 class dig():     def __init__(self,x,y):         self.x=x         self.y=y     def pd(self

python有關函式的全域性變數區域性變數

例一: a = 9 def b(): print(a) 結果打印出來是:9 a 是定義在函式外部的全域性變數,在函式內部可以使用。 例二: a = 4 def b(): a =

淺談python全域性變數區域性變數~

在被呼叫函式內賦值的變元和變數,處於該函式的“區域性作用域”。在所有函式之外賦值的變數,屬於“全域性作用域”。處於區域性作用域的變數,被稱為“區域性變數”。處於全域性作用域的變數,被稱為“全域性變數”。一個變數必是其中一種,不能既是區域性的又是全域性的。 可以

Python千萬要注意的全域性變數區域性變數問題

1、直接在函式中呼叫全域性變數 m = 100 def fun(): print("m1:",m) fun() print("m2:", m)  輸出: 2、函式體內呼叫與全域性變數同名的區域性變數 m = 100 def fun(): m = 50

python--全域性變數區域性變數

區域性變數: 是在函式內部定義的變數,只能在函式內部使用 函式執行結束後,函式的區域性變數,會被系統回收 作用:在函式內部使用,臨時儲存函式內部需要使用的資料 全域性變數: 是在函式外部定義的變數(沒有定義某一個函式內,所有函式都

關於python全域性變數區域性變數

全域性變數: 定義在函式外部,作用域是整個程式碼段,儲存在記憶體中。 區域性變數: 定義在函式內部,作用域僅在函式內部,儲存在棧中,當函式完成功能,區域性變數會自動丟失。 如果在函式內試圖是修改全域性變數,python會自動建立一個區域性變數替代,名字和全域性變數相同。 下面摘抄小甲魚老

Python變數學習-認識全域性變數區域性變數

學習Python的過程中少不了用到變數,在日常的編寫程式的過程中,每時每刻都在使用變數,   問:什麼是變數 答:變數是可以改變的數,通常沒有固定的值 問:有幾種變數 答:變數分為2種形式,即:全域性變數和區域性變數   名詞解釋:   全域性變數:顧名思義全域性變數,作用

js全域性變數區域性變數以及變數宣告提升

區域性變數和全域性變數重名時: 一、Javascript的變數的scope是根據方法塊來劃分的(也就是說以function的一對大括號{ }來劃分)。切記,是function塊,而for、while、if塊並不是作用域的劃分標準。 二、 當全域性變數跟區域性變數重名時,區域性變數的scope

JS最經典的全域性變數區域性變數問題(1、作用域作用域鏈 2、變數宣告提前)

var a = 10; function test(){ a = 100; console.log(a); console.log(this.a); var a; console.log(a); } test(); 1、程式的執行結果為:100

python全域性變數區域性變數

在函式內部定義的變數叫區域性變數,在函式外定義的變數叫全域性變數 如果全域性變數和區域性變數名稱相同,則在函式內部用的是區域性變數的值,就像就近原則一樣;在函式體外,用的還是全域性變數 a = 10 d

python 第二十四篇 全域性變數區域性變數的作用域

#變數的作用域:是指一個變數所產生的作用範圍,也就是說在哪一個範圍內變數能夠被直譯器所識別。 #變數分為:全域性變數 和 區域性變數 #全域性變數:一般宣告在函式的外部。 #全域性變數的作用域:整個.py檔案內都可以使用,都可以被識別。 #區域性變數:一般宣告在函式的

JS全域性變數區域性變數

全域性變數,作用域為所屬的整個程式。 定義形式: 在函式外定義。 在函式內定義,但是不加 var 宣告。 使用 window.變數名 的形式定義。(注:相容性未知) 使用 window['變數名'] 的形式定義。(注:

SQL全域性變數區域性變數(@@/@)

     在SQL中,我們常常使用臨時表來儲存臨時結果,對於結果是一個集合的情況,這種方法非常實用,但當結果僅僅是一個數據或者是幾個資料時,還要去建一個表,顯得就比較麻煩,另外,當一個SQL語句中的某些元素經常變化時,比如選擇條件,(至少我想)應該使用區域性變數。當然MS S

python基礎:函式名稱空間、作用域、全域性變數區域性變數

一、名稱空間: Python的名稱空間的本質是一個字典,用來記錄變數名稱和值。字典的key是變數的名稱,字典的value對於的是變數的值。 例如 {‘name’:’zs’,’age’:10} 名稱空間一共分為三種:區域性名稱空間、全域性名稱空間、內建名稱空間 區域性名稱空間: 每個函式都有自

Axure原型全域性變數區域性變數

axure全域性變數  全域性變數Global Variable:預設顯示名稱OnLoadVariable,作用範圍為一個頁面內,即站點地圖面板中一個節點(不包含子節點)內有效,所以這個全域性也不是指整個原型檔案內的所有頁面通用,還是有一定的侷限性的。 全域性變數可以直接

Python3 全域性變數區域性變數的使用

name='lhf' def change_name(): print('我的名字',name) change_name() def change_name(): name='帥了一筆' print('我的名字',name) change_name() print(name) d

java成員變數區域性變數

1.成員變數   在類中定義,用來描述物件將要有什麼。 2.區域性變數 在類的方法中定義,在方法中臨時儲存資料 成員變數和區域性變數區別 1.作用域不同 成員變數的作用域在整個類內部都是可見的 區域性變數的作用僅限於定義它的方法、 2.初始值不同 jav

JS 變數函式提升 全域性變數區域性變數

1. var a = 10; function test() { a = 100; console.log(a); console.log(this.a); var a; console.log(a); } test();//100 10 100 =&