• 关键字global


    引入两个示例:说明 局部作用域对全局作用域的变量(此变量只能是不可变的数据类型)只能进行引用,而不能进行改变,只要改变就会报错

    eg:1
    >>> a=1
    >>> def func():
        print(a)
        
    >>> func()
    1
    
    eg:2
    >>> a=1
    >>> def func():
        a+=1   //修改全局变量 
    >>> func() //运行失败
    Traceback (most recent call last):
      File "<pyshell#62>", line 1, in <module>
        func()
      File "<pyshell#61>", line 2, in func
        a+=1
    UnboundLocalError: local variable 'a' referenced before assignment

    如果遇到局部作用域去改变全局作用域的一些变量的需求,这怎么做呢?这就得用到关键字global

    (1)global第一个功能:在局部作用域中可以更改全局作用域的变量。

    >>> count=1
    >>> def search():
        global count
        count=2
    
        
    >>> search()
    >>> print(count)
    2
    >>> 

    (2)利用global在局部作用域也可以声明一个全局变量

    >>> def a():
        global local  //局部作用域中将local声明为全局变量
        local=1
        print(local)   
    >>> a()
    1
    >>> print(local) //没有声明,运行会报错
    1

    所以global关键字有两个作用:

    1,声明一个全局变量。

    2,在局部作用域想要对全局作用域的全局变量进行修改时,需要用到 global(限于字符串,数字)。

    重点:global在函数间的作用

    # a.py
    def out():
    ## global关键字作用
    global en
    en = 1
    other()
    print(out.__globals__['en'])
    ## 调用other可以打印en
    def other():
    print(en)

    #b.py
    from a import *
    ## b 文件没执行过a文件的out函数,也就是global还没定义
    # print('这个是out的:',out.__globals__['en']) # KeyError: 'en'
    def b():
    ## 执行out,global被定义
    out()
    ## 打印out函数的globals
    print('这个是out的:',out.__globals__['en'])
    ## 打印b函数的globals
    #print('这个是b的:',b.__globals__['en']) # KeyError: 'en'
    b()
    print('这里是分割线'.center(150,'-'))
    ## out函数执行过后,global已经被定义
    print('这个是out的:',out.__globals__['en'])
    # print(b.__globals__['en']) # KeyError: 'en'
     

    运行结果:

    1
    1
    这个是out的: 1
    ------------------------------------------------------------------------这里是分割线------------------------------------------------------------------------
    这个是out的: 1
    
    Process finished with exit code 0

    可以得知,如果执行了对应函数,global定义的函数内会存入对应变量,其他函数内则不会存入

  • 相关阅读:
    更换惠普G32笔记本的风扇和硬盘,内存条, 谨记 要做好CPU和显卡的 导热硅脂工作!
    怎么更新 WIN10里的SMBv1协议
    ubuntu-12.04.5-desktop-amd64 安装vmwaretools
    如何解决“ VMware Workstation 不可恢复错误: (vcpu-0) vcpu-0:VERIFY vmcore/vmm/main/cpuid.c:386 bugNr=1036521”
    联想移动硬盘无法访问 解决方法1
    阮一峰 ---开发者手册
    Earth Wind 一个查看全球风向的网站
    Linux帮助用法
    Linux历史命令管理以及用法
    Linux操作练习
  • 原文地址:https://www.cnblogs.com/bashliuhe/p/13193125.html
Copyright © 2020-2023  润新知