• python3的全局变量和局部变量


    局部变量

    1. 定义在函数体内部的变量称为局部变量
    2. 函数的形参也是局部变量
    3. 局部变量的作用范围只在声明该局部变量的函数体内
    4. 局部变量在函数调用时被创建,在函数调用完成后自动销毁

    全局变量

    1. 定义在函数体外,模块内的变量称为全局变量
    2. 全局变量在所有函数体内都可以进行访问
    3. 全局变量在函数体内不能直接修改绑定关系
    a = 100
    def test():
        a = 50
        print(a)
    
    test()
    print(a)
    

    输出结果:

    50
    100

    python3的作用域

    作用域也叫命名空间,是访问时查找变量的范围空间

    python3有四个作用域

    作用域 英文解释 英文简写
    局部作用域(函数内) Local(function) L
    外部嵌套函数作用域 Enclosing function locals E
    函数定义所在模块作用域 Global(module) G
    python内置模块的作用域 Bui B

    当访问一个变量的时候,变量查找顺序是先查找本地变量,然后是包裹此函数外部的函数内的变量,之后是全局变量,最后是內建作用域内的变量 。

    在默认情况下,变量名赋值会在当前作用域内创建变量和修改变量。

    v = 100  # 全局作用域
    
    
    def fun1():
        v = 200  # 外部嵌套函数作用域
        print('fun1.v=', v)
    
        def fun2():
            v = 300  # 局部作用域
            print('fun2.v=', v)
            print(max)  # max函数都没有创建,在内建函数作用域中,只读,不能改变
                        # 可以在其余三个作用域重新创建。
        fun2()
    
    
    fun1()
    
    print("全局变量.v=", v)
    
    print(max)  # max变量定义在内置模块的作用域,是解释执行器提前定义好的
    

    global关键字

    作用

    声明一个或多个变量,这些变量的作用域为模块级的作用域的变量,即全局变量

    将赋值变量映射到模块文件内部的作用域

    a = 10
    def test():
        global a
        a = 5
        print(a)
    test()
    print(a)

    输出结果:

    5
    5

    说明:

    全局变量如果要在函数内部被赋值,则必须经过全局声明,否则会被认为是局部变量

    不能先声明局部变量,再用global声明为全局变量

    global变量列表里的变量名不能出现在次作用域内的形参列表

    nonlocal语句

    nonlocal声明的变量的作用域是外部嵌套函数作用域

    def test():
        a = 10
    
        def test2():
            nonlocal a 
            a = 5
            print(a)
        
        test2()
        print(a)
    test()

    说明:

    nonlocal语句只能在被嵌套函数内部进行使用

    访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作

    当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近一层的变量进行操作

    nonlocal语句的变量列表的变量名不能出现在此函数的参数列表里

  • 相关阅读:
    javascript中万恶的function
    Windows7下如何安装部署秋色园CYQBlog源码V1.0网站
    Extjs2.2:Panel里面嵌入Excel表格
    Extjs做界面很酷;感谢博客园给我一个展示的机会;借此向大家展示一下EXTJS的魅力
    16Aspx.com改进版Extjs简单版酒店管理系统提供下载!
    Ext2.2+ASP.NET开发框架已完成欢迎大家下载!
    Extj+Asp.net开发框架V1.1树的操作
    Ext2.2程序开发实战(1)登录界面
    扩展欧几里得定理
    C语言 统计整数二进制表示中1的个数
  • 原文地址:https://www.cnblogs.com/lishanlei/p/10707857.html
Copyright © 2020-2023  润新知