• 函数的嵌套+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()
    

      

  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/YangWenYu-6/p/10098521.html
Copyright © 2020-2023  润新知