Python中的作用域和global用法

2021-09-12 18:58:09 字數 3144 閱讀 5226

如果想在乙個函式中要為乙個定義在函式外的「變數」賦值,也即是為全域性變數賦值。我們使用global關鍵字。如果不適用global,就會報錯。main方法是個例外

在函式內部修改全域性變數,報錯

# -*- coding: utf-8 -*-

age =

18def

add_age()

: age+=

1print

.format

(age)

add_age(

)print

"your age is {}"

.format

(age)

報錯資訊

traceback (most recent call last):

file "/pycharmprojects/test/com/lyh/study/2023年03月17日01.py", line 8, in add_age()

file "/pycharmprojects/test/com/lyh/study/2023年03月17日01.py", line 5, in add_age

age+=1

unboundlocalerror: local variable 'age' referenced before assignment

process finished with exit code 1

python 中,乙個變數的作用域總是由在**中被賦值的地方所決定的。

當在函式中使用未認證的變數名時,python搜尋4個作用域

在使用變數時,按照以上的順序依次查詢,並且在第一處能夠找到這個變數名的地方停下來。如果變數名在整個的搜尋過程中都沒有找到,就會報錯。

上邊所說的變數規則只適用於簡單物件,當出現引用物件時,則有另一套搜尋規則:屬性引用搜尋乙個或多個物件,而不是作用域,並且有可能涉及到所謂的"繼承"

函式只未定義重名變數

在模組層面定義的變數(無需global修飾),如果在函式中沒有再定義同名變數,可以在函式中當做全域性變數使用:

# -*- coding: utf-8 -*-

age =

18def

add_age()

: age_1 = age+

1print

"add age={}"

.format

(age_1)

add_age(

)print

"your age is {}"

.format

(age)--

----

----

----

----

----

----

----

--#列印結果

add age=

19your age is

18

函式中的定義在引用前使用

而如果在函式中的定義在引用前使用,那麼會正常執行但函式中的變數和模組中定義的全域性變數不為同乙個

age =

18def

add_age()

: age =

19print

"add age={}"

.format

(age)

add_age(

)print

"your age is {}"

.format

(age)--

----

----

----

----

----

----

----

--#列印結果

add age=

19your age is

18

但是如果使用如下的操作就會報錯

age =

18def

add_age()

: age +=

1print

"add age={}"

.format

(age)

add_age(

)print

"your age is {}"

.format

(age)--

----

----

----

----

----

----

----

--#列印結果

unboundlocalerror: local variable 'age' referenced before assignment

如果在函式使用某一變數後又對其進行修改(也即再賦值),怎麼讓函式裡面使用全域性變數而不是函式內部的區域性變數呢?這時候global修飾符就派上用場了。

# -*- coding: utf-8 -*-

age =

18def

add_age()

:global age

age +=

1print

"add age={}"

.format

(age)

add_age(

)print

"your age is {}"

.format

(age)--

----

----

----

----

----

----

----

----

--#輸出結果

add age=

19your age is

19

注意 :global語句不允許同時進行賦值如global age =19 或者 global age+=1

如果函式中變數無global關鍵字,優先讀取區域性變數,能讀取全域性變數,無法對全域性變數賦值 age = 19(變數右邊不能是「=」,對於可變變數可以進行追加刪除等操作)

如果函式中變數有global關鍵字,可讀取,可賦值 age = 19

js中的作用域和作用域

作用域是在執行時 中的某些特定部分中變數,函式和物件的可訪問性 簡單的說就好似變數能起到作用的範圍 區域性作用域 也可以叫做函式作用域 一般只在固定的 片段內可訪問到,最常見的例如函式內部 如下 在我們在函式中用var關鍵字宣告乙個 變數 a 在函式外輸出a的值 function scope con...

python中的作用域

python中的作用域分4種情況 x int 2.9 int built in g count 0 global def outer o count 1 enclosing def inner i count 2 local print o count print i count 找不到 inner...

python 中的作用域和命名空間

命名空間,存放名字的地方,準確的說命名空間是存放名字與變數值繫結關係的地方 內建命名空間 python自帶的名字,在python直譯器啟動時產生,存放一些python內建的名字 全域性命名空間 在執行檔案時,存放檔案級別定義的名字 區域性命名空間 在執行檔案的過程中,如果呼叫了函式,則會產生該函式的...