python函數嵌套與global關鍵字的使用

全局變量的使用

# 代碼塊1
a = 10
def foo():
    a = 2

foo()
print(a) # 10
---------------
# 代碼塊2
a = 10
def foo():
   global a 
   a += 1

foo()
print(a) # 3
----------------
# 然後將代碼塊2用一個函數封裝起來時,錯誤發生了:
def f1():
    a = 10

    def foo():
        global a
        print(a) # NameError: name 'a' is not defined

    foo()

f1()

# 但是,將global a 註釋掉後:
def f1():
    a = 10

    def foo():
        # global a
        print(a) # 10

    foo()

f1()

# 但是,不能修改a,修改的話會報錯:
def f1():
    a = 10

    def foo():
        # global a
        print(a)  # UnboundLocalError: local variable 'a' referenced before assignment
        a += 1
        print(a)  

    foo()

f1()
-----------------
# 解決方法
def f1():
    global a
    a = 10

    def foo():
        global a
        a += 1
        print(a)  # 11

    foo()

f1()

變量作用域問題

# 示例1
class Solution(object):
    def VariableScope(self):
        a = 10  # a的作用域是整個VariableScope,但如果有重名的局部變量,此處的a會被屏蔽掉

        def visit():
            print('visit:', a)  # 可以訪問,但只具有可讀權限,如果強行修改,會出現下面的bug。

            # 如果加上下面這兩句代碼,
            # 會報UnboundLocalError: local variable 'len_n' referenced before assignment
            # a += 1
            # print('visit:',a)

        def visit2():
            a = 20
            print('visit2:', a)

        visit()
        visit2()
        print('VariableScope:', a)  # a的作用域是整個VariableScope,但如果有重名的局部變量,此處的a會被屏蔽掉
        return


s = Solution()
s.VariableScope()

'''
visit: 10
visit2: 20
VariableScope: 10
'''
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章