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可以在函数外了
  • 相关阅读:
    累积进度图及本周PSP饼状图
    四则运算
    结对编程
    关于索引的误解
    Examining Pages
    索引存储原理
    【转】学习Robot Framework必须掌握的库—-BuiltIn库
    【转】Robot Framework用法总结
    【转】浅谈自动化测试框架设计
    【转】python虚拟环境--virtualenv
  • 原文地址:https://www.cnblogs.com/wilson-5133/p/10362645.html
Copyright © 2011-2022 走看看