zoukankan      html  css  js  c++  java
  • Python3笔记029

    第6章 函数

    • 6.1 函数的定义和调用
    • 6.2 参数传递
    • 6.3 函数返回值
    • 6.4 变量作用域
    • 6.5 匿名函数(lambda)
    • 6.6 递归函数
    • 6.7 迭代器
    • 6.8 生成器
    • 6.9 装饰器

    6.4 变量作用域

    作用域指的是变量的有效范围,根据变量的有效范围将变量分为局部变量和全局变量。

    6.4.1、局部变量

    局部变量是指在函数内部定义并使用的变量,它只在函数内部有效,一旦执行完毕,局部变量就会被回收,无法访问。

    6.4.2、全局变量

    全局变量为能够作用于函数内外的变量。

    1、如果一个变量,在函数外定义,那么不仅函数外可以访问到,在函数内也可以访问到。

    当局部变量与全局变量重名时,对函数体的变量进行赋值后,不影响函数体外的变量。

    2、在函数体内定义,并且使用global关键字修饰,该变量就是全局变量。在函数体外也可以访问到该变量,并且在函数体内外还可以对其进行修改。

    尽管python允许全局变量和局部变量重名,但是在实际开发时,不建议这么做,因为这样容易让代码混乱,很难分清哪些是全局变量,哪些是局部变量。

    # 块级别,变量是没有作用范围的,相当于全局变量
    ## if语句
    if True:
        color = "绿色"
    print(color)
    output:
    绿色
    ## for语句
    list1 = []
    for i in range(3):
        list1.append(i)
    print(i)
    output:
    2
    
    # 函数级别,变量是有作用范围的
    def function_print(): # 传递不定长参数,即参数个数不固定
        week = "星期三"
    
    print(week)
    output:
    NameError: name 'week' is not defined
    
    # 类级别,变量是有作用范围的
    class Date1():
        day = 1
        week = "星期三"
    
    print(day)
    output:
    NameError: name 'day' is not defined
    

    从程序运行结果来看,函数级别、类级别中的变量有作用域,语句块级别的变量没有作用域。

    Python的作用域一共有4层,分别是:

    • L (Local) 局部作用域
    • E (Enclosing) 闭包函数外的函数中
    • G (Global) 全局作用域
    • B (Built-in) 内建作用域

    Python以L –> E –> G –>B的规则查找变量,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,最后去内建中找。如果这样还找不到,那就提示变量不存在的错误。

    MIN = 1  # 全局变量
    MAX = 8  # 全局变量
    print(f"MIN={MIN},MAX={MAX}")
    
    
    def func1():
        global MIN  # 使用global关键字 修改全局变量
        MIN += 1
        a = 5  # 局部变量
        b = 1
        print(f"MIN={MIN},a={a},b={b}")
    
        def func2():
            MAX = 9  # 局部变量与全局变量同名,局部变量会覆盖全局变量
            nonlocal a  # 使用nonlocal关键字 修改外部函数的变量
            a += 1
            b = 2  # 内部函数变量与外部函数变量同名,覆盖
            print(f"MIN={MIN},MAX={MAX},a={a},b={b}")
    
        func2()  # 内部函数被外部函数调用
    
    
    func1()
    print(f"MIN={MIN},MAX={MAX}")
    
  • 相关阅读:
    面试题库
    集合的交、查、并
    mysql_server安装
    maven构建jar包
    Centos7下 升级php5.4到7.1 yum安装
    redis
    常见shell用法
    Mac下的LDAP客户端 ApacheDirectoryStudio
    redis弱密码漏洞利用
    Freeradius+Cisco2500AC+OpenLdap认证
  • 原文地址:https://www.cnblogs.com/infuture/p/13282296.html
Copyright © 2011-2022 走看看