zoukankan      html  css  js  c++  java
  • 关键字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定义的函数内会存入对应变量,其他函数内则不会存入

  • 相关阅读:
    [Linux] 设置系统时区
    [Python] 当猎头遇上 Guido van Rossum
    [Ubuntu] LightDM 轻量级桌面显示管理器
    [Java] Apache Ant 构建基础教程
    [Python] pip 简明指南
    .NET Core下的Spring Cloud——前言和概述
    福州首届.NET开源社区技术交流会圆满成功
    【福州活动】| "福州首届.NET开源社区线下技术交流会"(2018.11.10)
    使用CoreRT将.NET Core发布为Native应用程序
    使用.NET Core快速开发一个较正规的命令行应用程序
  • 原文地址:https://www.cnblogs.com/bashliuhe/p/13193125.html
Copyright © 2011-2022 走看看