024 作用域 和

2021-10-08 21:46:54 字數 1853 閱讀 5209

#-*- coding = utf-8 -*-

#@time:2020/8/3 12:52

#@author:huxuehao

#@file:024_作用域_和_命名空間.py

#@software:pycharm

# 一、作用域:變數生效的區域

# 1.分為全域性作用域、函式作用域(區域性作用域)

# 2.全域性作用域:

# - 全域性作用域在執行時建立,在程式執行後銷毀

# - 所有函式以外的區域都是全域性作用域

# - 在全域性作用域中定義的變數都屬於全域性變數

# 3.函式作用域:

# - 在函式呼叫時建立,函式執行後銷毀

# - 函式每呼叫一次就會產生乙個新的函式作用域

# - 函式作用域中的變數就是區域性變數

# - 區域性變數優先使用同級作用域的,同級中沒有的話去上一級中去找

a=10

# 全域性變數

defju()

: a=

20# 區域性變數

return a # 區域性變數優先使用同級作用域的

print

(ju())

# 20

defju()

:return a # 同級中沒有的話去上一級中去找

print

(ju())

# 10

# 4.如果希望在函式中使用同名全域性變數,可以使用global關鍵字宣告

defju()

:global a # 呼叫全域性變數

a =15# 修改全域性變數

print

("函式中呼叫的global a = "

,a)ju(

)print

("全域性變數a = "

,a)# 20

# 二、命名空間(namespace)

# 1. 命名空間是指變數儲存的位置

# 2. 每個作用域都有其物件的命名空間

# 3. 全域性命名空間用於儲存全域性變數,函式命名空間用於儲存區域性變數

# 4. 命名空間實際上就是乙個字典(dict)

# 5. 我們可以通過locals() 函式來獲取相應的命名空間

scope=

locals()

# 獲取全域性命名空間

# print("全域性命名空間:",scope)

a="hello,world"

print

(a)#通過變數名列印變數

print

(scope[

'a']

)#通過命名空間列印變數

scope[

'b']

='這是我通過命名空間新增的變數 b '

# 通過命名空間新增變數(不建議)

print

(b)# 雖然我上面沒有定義b 但是依然能列印出b,即使語法上有報錯

defju_space()

: a=

1 b=

2 c=

3 scope=

locals()

print

("函式的命名空間:"

,scope)

ju_space(

)# 6. 在函式中我們可以通過globals() 獲取到全域性命名空間

defquan_space()

: quju=

globals()

print

("函式內部通過globals()函式獲取到了全域性命名空間:"

,quju)

quan_space(

)

作用域和作用域鏈

全域性作用域 全域性的變數執行環境 函式作用域 函式內部的變數執行環境 每個函式都有自己的執行環境,當執行流進入乙個函式時,函式的環境就會被推入乙個環境棧中。函式執行之後,棧將環境彈出,把控制權返回給之前的執行環境。全域性作用域只要頁面不解除安裝,就一直存在,不釋放。函式每次在呼叫時,都會形成乙個作...

作用域和作用域鏈

var a 10 function f1 x,y f1 console.log b 此時b輸出5,因為b 5為隱式的全域性變數 在函式外面使用var 宣告的變數都是全域性變數,作用範圍是程式執行的地方.全域性作用域 函式除外 函式的形參是區域性變數 在函式內部,不使用var 定義的變數,叫隱式全域性...

作用域和作用域鏈

執行環境定義了變數和函式有權訪問的其他資料,決定了他們各自的行為。每個執行環境都有與之對應的變數物件 variable object 儲存著該環境中定義的所有變數和函式。我們無法通過 來訪問變數物件,但是解析器在處理資料時會在後台使用到它。執行環境有全域性執行環境 也稱全域性環境 和函式執行環境之分...