zoukankan      html  css  js  c++  java
  • Python局域和全局变量、global的用法讲解【转】

    我们通过几个例子来弄明白局域或全局变量,首先我们在函数内部和函数调用的代码中都使用同一个变量 a,将下方代码写入 /home/shiyanlou/local.py

    #!/usr/bin/env python3
    def change():
        a = 90
        print(a)
    a = 9
    print("Before the function call ", a)
    print("inside change function", end=' ')
    change()
    print("After the function call ", a)
    运行程序:

    此处输入图片的描述

    首先我们对 a 赋值 9,然后调用更改函数,这个函数里我们对 a 赋值 90,然后打印 a 的值。调用函数后我们再次打印 a 的值。

    当我们在函数里写 a = 90 时,它实际上创建了一个新的名为 a 的局部变量,这个变量只在函数里可用,并且会在函数完成时销毁。所以即使这两个变量的名字都相同,但事实上他们并不是同一个变量。

    那么如果我们先定义 a,在函数中是否可以直接使用呢?

    例如下面这段代码:

    #!/usr/bin/env python3
    a = 9
    def change():
        print(a)
    change()

    这段代码是没有问题的,可以直接打印输出 9。稍微改动一下:

    #!/usr/bin/env python3
    a = 9
    def change():
        print(a)
        a = 100
    change()
     

    现在就会报错了:“UnboundLocalError: local variable 'a' referenced before assignment”,原因是当函数中只要用到了变量 a,并且 a 出现在表达式等于号的前面,就会被当作局部变量。当执行到 print(a) 的时候会报错,因为 a 作为函数局部变量是在 print(a)之后才定义的。

    现在我们使用 global 关键字,对函数中的 a 标志为全局变量,让函数内部使用全局变量的 a,那么整个程序中出现的 a 都将是这个:

    #!/usr/bin/env python3
    a = 9
    def change():
        global a
        print(a)
        a = 100
    print("Before the function call ", a)
    print("inside change function", end=' ')
    change()
    print("After the function call ", a)

    程序中的 end=' ' 参数表示,print 打印后的结尾不用换行,而用空格。默认情况下 print 打印后会在结尾换行。

    程序执行的结果,不会报错了,因为函数体内可以访问全局的变量 a

    Before the function call  9
    inside change function 9
    After the function call  100
     

    在函数内使用 global 会有什么作用呢?尝试下面的代码:

    #!/usr/bin/env python3
    def change():
        global a
        a = 90
        print(a)
    a = 9
    print("Before the function call ", a)
    print("inside change function", end=' ')
    change()
    print("After the function call ", a)
     

    程序执行的结果:

    Before the function call  9
    inside change function 90
    After the function call  90
     

    这里通过关键字 global 来告诉 a 的定义是全局的,因此在函数内部更改了 a 的值,函数外 a 的值也实际上更改了。

    运行程序:

    此处输入图片的描述

    转自

    Python3 简明教程 - 函数 - 实验楼
    https://www.shiyanlou.com/courses/596/learning/?id=2043

  • 相关阅读:
    Android周学习Step By Step(6)Android的数据库SQLite
    Android周学习Step By Step(2)HelloWorld
    解决方案(.sln)文件
    浅谈测试(1)单元测试
    批量上传功能的实现
    分页控件AspNetPager的用法
    .net下验证码的简单实现
    window.alert重写实现友好的对话框(支持IE)
    网页上自定义运行和测试HTML脚本
    数据库行转列的sql语句(zt)
  • 原文地址:https://www.cnblogs.com/paul8339/p/12273613.html
Copyright © 2011-2022 走看看