函式的巢狀+nonlocal和global關鍵字(重點)
阿新 • • 發佈:2018-12-10
1.在函式中宣告函式
在內部函式中使用變數的時候, 查詢順序: 先找自己 -> 上一層 -> 上一層..全域性 -> 內建
# 函式的互相呼叫 # def func1(): # print("我是神器的func1") # # def func2(): # func1() # print("我是神器的func2") # # def func3(): # print("我是神器的func3") # # func5() # # def func4(): # func3() # print("我是神器的func4") # # def func5(): # func2() # func3() # print("我是神器的func5") # # def func6(): # func5() # print("我是神器的func6") # func3() # func1() # # func6()
2.nonlocal和global關鍵字(重點)
global: 在區域性引入全域性變數
nonlocal: 在區域性...內層函式引入外層離他最近的那個變數.
# def outer(): # def inner(): # print("我的天哪") # print("還可以這樣寫???") # inner() # # outer() # inner() # 在全域性不能找到區域性的內容 # def func1(): # print("1") # def func2(): # print("2") # def func3(): # print("3") # print("4") # func3() # print(5) # print("6") # func2() # print("7") # # func1() # 全域性變數一般是不能隨意的修改的 # a = 10 # def func(): # # 慎用. # global a # global 表示從全域性把一個變數引入到區域性, 後面使用的a都是全域性變數 # a += 10 # ?? a = a + 10 # 現在的a是全域性的, 你現在檢視改全域性變數 # print("裡面的列印",a) # func() # print("外面的列印", a) # a = 10 # def func(): # def inner(): # # 慎用. # global a # global 表示從全域性把一個變數引入到區域性, 後面使用的a都是全域性變數 # a += 10 # ?? a = a + 10 # 現在的a是全域性的, 你現在檢視改全域性變數 # print("裡面的列印",a) # inner() # func() # print("外面的列印", a) # nonlocal 在區域性, 尋找離他最近的外層的一個變數 # a = 50 # def func1(): # # a = 10 # 區域性 # def func2(): # nonlocal a # 不找全域性, global找全域性 # a += 10 # a = a + 10 python不讓這麼幹 # print("func2", a) # func2() # print(a) # func1() # print(a) # 如果沒有nonlocal和global 查詢的順序: 自己, 上一層, 上一層, 上一層 # def func0(): # a = 50 # def func1(): # a = 10 # 區域性 # def func2(): # nonlocal a # 不找全域性, global找全域性 # a += 10 # a = a + 10 python不讓這麼幹 # print("func2", a) # func2() # print(a) # func1() # print(a) # func0() # a = 1 # def fun_1(): # a = 2 # def fun_2(): # nonlocal a # a = 3 # def fun_3(): # a = 4 # print(a) # print(a) # fun_3() # print(a) # print(a) # fun_2() # print(a) # print(a) # fun_1() # print(a) flag = False def login(): global flag uname = input("使用者名稱:") upwd = input("密碼:") if uname == "alex" and upwd == "123": flag = True else: flag = False def fatie(): if flag == True: print("可以發帖") else: print("滾去登入") login() fatie() fatie() fatie() fatie()