您的“關注”和“點贊”,是信任,是認可,是支持,是動力…
如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。
1 Python 全局變量
1.1 Python 全局變量概述
在 Python 中,根據變量的定義位置劃分,在所有函數的外部定義的變量,稱爲全局變量,英文叫做 Global Variable。
1.2 定義全局變量的方式
1.2.1 在函數外定義全局變量
在所有函數外定義的變量,鐵定是全局變量。
舉例如下所示:
name = '碼農阿杰' # 函數外定義全局變量
def info(): # 定義 info() 函數
print('在函數內訪問全局變量 name =', name)
info() # 調用 info() 函數
print('在函數外訪問全局變量 name =', name)
運行結果:
在函數內訪問全局變量 name = 碼農阿杰
在函數外訪問全局變量 name = 碼農阿杰
1.2.2 在函數內定義全局變量
在函數內定義的變量,如果使用 global
關鍵字對其修飾,那麼該變量就是全局變量。
舉例如下所示:
def info(): # 定義 info() 函數
global name # 注意:先使用 global 關鍵字對函數內的變量進行修飾,此時不能給變量賦值,否則語法會不通過的哦。
name = '阿杰老師' # 注意:再對變量進行賦值。那麼 name 變量就變成了全局變量。
print('在函數內訪問全局變量 name =', name)
info() # 調用 info() 函數
print('在函數外訪問全局變量 name =', name)
運行結果:
在函數內訪問全局變量 name = 阿杰老師
在函數外訪問全局變量 name = 阿杰老師
1.3 Python 全局變量作用域概述
Python 全局變量的默認作用域是整個程序。
具體指的是全局變量可以在各個函數的外部使用,也可以在各個函數的內部使用。從上面的例子中可以看出,全局變量 name ,既可以在函數內被訪問,也可以在函數外被訪問。
2 Python 局部變量
2.1 Python 局部變量概述
在 Python 中,根據變量的定義位置劃分,在函數內部定義的變量,稱爲局部變量,英文叫做 Local Variable。
舉例如下所示:
例一,
def info(): # 定義 info() 函數
name = '阿杰老師' # 在函數內定義的局部變量 name
print('在函數內訪問全局變量 name =', name)
info() # 調用 info() 函數
print('在函數外訪問全局變量 name =', name) # 在函數外訪問局部變量,會報錯
運行結果:
在函數內訪問全局變量 name = 阿杰老師
print('在函數外訪問全局變量 name =', name)
NameError: name 'name' is not defined
例二,
def info(age): # 定義 info(age) 函數
name = '阿杰老師' # 在函數內定義的局部變量 name
print('在函數內訪問全局變量 name =', name)
print('在函數內訪問形參 age =', age)
info(18) # 調用 info() 函數
print('在函數外訪問全局變量 name =', name) # 在函數外無法訪問局部變量
print('在函數外訪問形參 name =', age) # 形參也是局部變量,在函數外無法訪問
運行結果:
在函數內訪問全局變量 name = 阿杰老師
在函數內訪問形參 age = 18
Traceback (most recent call last):
File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 11, in <module>
print('在函數外訪問全局變量 name =', name) # 在函數外無法訪問局部變量
NameError: name 'name' is not defined
2.2 Python 局部變量作用域概述
Python 局部變量的作用域僅限於函數內部,出了函數就不能使用了,
具體指的是局部變量在函數外部被訪問,Python 解釋器會報 NameError
錯誤,並提示我們沒有定義要訪問的變量。從上面的例子以及運行結果可以看出。
3 獲取指定作用域範圍內的變量
3.1 使用 globals() 函數獲取全局作用域內的所有全局變量
使用格式如下所示:
globals()
對以上格式說明,
globals()
:是 Python 的內置函數。- 返回值:globals() 函數返回一個包含全局作用域內的所有全局變量(包含 Python 內置的全局變量)的字典,鍵爲變量名,值爲變量值。
舉例如下所示:
# 定義全局變量
name = '碼農阿杰'
age = 18
def info():
# 定義局部變量
gender = '男'
num = 1012
print(globals())
globals()['name'] = '阿杰' # 訪問全局變量 name,並修改
print('修改後的 name =', name)
運行結果:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000017FE0CE0880>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py', '__cached__': None, 'name': '碼農阿杰', 'age': 18, 'info': <function info at 0x0000017FE2935EE0>}
修改後的 name = 阿杰
3.2 使用 locals() 函數獲取當前作用域內所有變量
使用格式如下所示:
locals()
對以上格式說明,
locals()
:是 Python 的內置函數。- 返回值:返回包含當前作用域(在函數內用 locals() 函數,返回包含所有局部變量的字典;在函數外用 locals() 函數,與 globals() 函數作用相同)內所有變量(包含 Python 內置的全局變量)的字典。
舉例如下所示:
# 定義全局變量
name = '碼農阿杰'
age = 18
def info():
# 定義局部變量
gender = '男'
num = 1012
print(locals()) # 在函數內使用 locals() 函數
locals()[gender] = '女' # 只能訪問,不能修改
print('修改後 gender =', gender)
info() # 調用 info() 函數
print('------------------------------')
print(locals()) # 在函數外使用 locals() 函數
運行結果:
{'gender': '男', 'num': 1012}
修改後 gender = 男
------------------------------
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000012533DF0880>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py', '__cached__': None, 'name': '碼農阿杰', 'age': 18, 'info': <function info at 0x0000012535A35EE0>}
3.3 使用 vars(object) 函數獲取指定範圍內所有的變量
使用格式如下所示:
vars([object])
對以上格式說明,
vars()
:是 Python 的內置函數。- 返回值:返回一個指定 object 對象範圍內所有變量(包含 Python 內置的全局變量)組成的字典。
[object]
:可選參數。不寫 object 參數,vars() 和 locals() 的作用完全相同。
舉例如下所示:
# 定義一個 Person 類
class Person:
# 定義全局變量
name = '碼農阿杰'
age = 18
print(vars()) # 不寫 object 參數,跟 locals() 函數用法一樣。
print('----------------------------')
print(vars(Person)) # 寫 object 參數
運行結果:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001C00F7E0880>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py', '__cached__': None, 'Person': <class '__main__.Person'>}
----------------------------
{'__module__': '__main__', 'name': '碼農阿杰', 'age': 18, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}