zoukankan      html  css  js  c++  java
  • python基础--函数作用域

    # 在Python中,函数的变量并不是在什么地方都可以访问的,访问权限取决于这个变量是在哪里定义的。
    # 变量的作用域决定了那一部分程序可以访问哪个特定的变量名称
    # python的函数作用域一共有四种
    # L (Local) 局部作用域
    # E (Enclosing) 闭包函数外的函数中
    # G (Global) 全局作用域
    # B (Built-in) 内建作用域
    # 俗称LEGB,查找顺序为:L—E—G—B,局部找不到,就去外边的函数找,
    # 然后去寻找全局变量,最后去内建作用域中找。
    num = 5
    def printer():
        num = 6
        print(num) # 这时是局部作用域 6
    printer()
    # print(num) # 这时是外部作用域
    # 函数内部可以用全局作用域,内建作用域,而在函数外不能用局部作用域
    # 在函数内部可以用全局作用域,但是有下边一种情况
    # num = 5
    # def change_num():
    #     num += 5
    # change_num()
    # 此时是报错的,因为python内部对变量的保护,防止变量的值莫名其妙的被改变。
    # 若要在函数内部改变全局变量或者函数外部的函数变量是,需要用到两个关键字
    # global :说明此时我们用的是全局变量
    # nonlocal :说明我们此时用的是函数外函数的变量
    # 在看上边的例子
    num = 5
    def chang_num():
        global num # 此时就可以修改全局变量了
        num += 5
        print(num)
    chang_num()
    # 当函数内部有变量num时,而且全局变量也有num时,如果我们要用全局变量,
    # 那么该怎么办呢,具体答案是不能这样做,不能在局部变量存在的情况下引用全局变量
    # 下边这个例子是报错的,具体可以自己自行体会。
    # num = 5
    # def chang_num():
    #     num = 10
    #     global num
    #     print(num)
    # chang_num()
    # 由此类比  E (Enclosing)函数外的函数的作用域。 
    def outer1():
        num = 10
        def inner():
            print(num) # 此时num为10
    
    def outer2():
        num = 10
        def inner():
            # 如果我们要修改num的值,需要用到 nonlocal关键字
            nonlocal num
            num += 10
            print(num) # 此时num为20
  • 相关阅读:
    network issue troubleshooting
    xpath tutorial
    自己的Queue
    TCP/IP Socket
    C++对话框创建及修改对话框属性
    C++文件和目录的创建和删除
    C#程序中降低内存清理方法
    UDP通信
    C++ 中TCHAR字符串数组转化为Char类型数组
    配置supervisor 让laraver的队列实现守护进程
  • 原文地址:https://www.cnblogs.com/cong12586/p/11356007.html
Copyright © 2011-2022 走看看