1. 程式人生 > >函式的巢狀+nonlocal和global關鍵字(重點)

函式的巢狀+nonlocal和global關鍵字(重點)

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()