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可以在函数外了
  • 相关阅读:
    asp.net core文件上传与下载
    asp.net Core1.1版本生成超链接/a链接标签的方式
    CentOS 7.2 64位上装mysql
    CentOS7 yum 安装 Nginx最新版本
    Mysql Mariadb 密码问题
    关闭selinux
    OTRS
    CentOS查看一共安装了多少软件包,是那些软件包
    CentOS删除安装的程序
    centos7 上安装mysql5.7后登录报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Yes 或者No)
  • 原文地址:https://www.cnblogs.com/wilson-5133/p/10362645.html
Copyright © 2011-2022 走看看