zoukankan      html  css  js  c++  java
  • Python基础学习12--变量作用域

    变量作用域

    • 变量有作用范围限制
    • 分类:按照作用域分类
      1. 全局(global):在函数外部定义
      2. 局部(local):在函数内部定义
    • 变量的作用范围:
      1. 全局变量:在整个全局范围都有效
      2. 全局变量在局部可以使用(即函数内部可以方位函数外部定义的变量)
      3. 局部变量在局部范围可以使用
      4. 局部变量在全局范围无法使用
    • LEGB原则
      1. L(Local):局部作用域
      2. E(Enclosing function locale):外部嵌套函数作用域
      3. G(Global module):全局作用域
      4. B(Buildin): 内置作用域(内置函数所在模块的范围)
      5. 以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
    # a1是全局变量
    a1 = 100
    def func1():
        print(a1,"a1在函数内")
        # a2的作用范围是函数func1内
        a2 = 99
        print(a2,' a2也在函数内')
    
    print(a1)
    print('-' * 15)
    func1()
    print('-' * 15)
    print(a2)

    输出结果如下:

    100
    ---------------
    100 a1在函数内
    99  a2也在函数内
    ---------------
    NameError: name 'a2' is not defined    # 因为a2是函数体内的局部变量,所以在外部调用时会报错!

     如果函数外部想要调用函数内部的变量,此时则需要将局部变量升级为全局变量

    def func2():
        global b1       # globa的作用时将局部变量转为全局变量----global一定要放在变量 b1 之前
        b1 = 100  
        print(b1,'b1在函数内')
    
    # print(b1)         # 如果在调用函数前,输出b1,则会报错,因为函数在未调用前,python是不会执行函数体,因此在python看来,b1是未定义的变量
    func2()
    print('-' * 15)
    print(b1,'b1可以在函数外了')

     输出结果如下:

    100 b1在函数内
    ---------------
    100 b1可以在函数外了
  • 相关阅读:
    开源工作流Fireflow源码分析之运行流程二
    沿线批量内插点对象
    shapefile数据无法正常浏览的问题
    InMemeryWorkspace的效率测试结果
    Oracle数据库SQL语句性能调整的基本原则[转存]
    <转>arcgis server部署 自己安装的体会
    AO中保存二进制大对象(BLOB)
    How to create new geodatabases
    使用C#向Excel中写数据
    oracle数据库的sde数据文件迁移操作方法
  • 原文地址:https://www.cnblogs.com/wilson-5133/p/10362645.html
Copyright © 2011-2022 走看看