Python globals()和locals()比較


Python的兩個內置函數,globals()和locals() ,它們提供了基於字典的訪問局部和全局變量的方式。

globals()是可寫的,即,可修改該字典中的鍵值,可新增和刪除鍵值對。

而locals()是不可修改字典中已存在的鍵值的,也不能pop移除鍵值對,但是可以新增鍵值對。

Demo:

a = 1   # 定義一個全局變量a

def demo():
    x = 100     # 定義一個局部變量x
    global b
    b = 2       # 定義一個全局變量b,因為在函數內,只有調用了該函數才有變量b

    print(globals())	
    print(locals())		

    globals()['a'] = 'modified a'   # 修改函數外的全局變量a,成功
    globals()['b'] = 'modified b'   # 修改函數中定義的全局變量b,成功
    globals()['c'] = 'new c'        # 新增一個全局變量c,成功
    locals()['x'] = 'modified x'    # 修改函數內的局部變量x,結果失敗了
    locals()['y'] = 'new y'         # 新增一個函數內的局部變量y,成功
    globals().pop('c')              # 嘗試移除全局變量c,成功
    locals().pop('x')               # 嘗試移除局部變量x,失敗了

    print(globals())
    print(locals())
def print_b():
    try:
        print(b)
    except NameError as e:
        print(e)

def print_x():
    try:
        print(x)
    except NameError as e:
        print(e)


print_b()   # b雖然是全局變量,但是是在函數demo內定義的,在該函數調用前b是沒有的,所以not defined
demo()      # 調用demo函數,此時有了全局變量b
print_x()   # x局部變量,在外訪問不到
print_b()   # 此時打印全局變量b正常,並且是修改后的值

# 打印結果		字典中省略了內置的變量和定義的方法,方便比較
name 'b' is not defined
{'a': 1, 'b': 2}	# globals()
{'x': 100}			# locals()
{'a': 'modified a', 'b': 'modified b'}		# globals()
{'y': 'new y', 'x': 100}					# locals()
name 'x' is not defined
modified b


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM