Python函数作用域示例详解

作者:

文章目录
  • LEGB 规则是 Python 查找变量的顺序,即当在代码中引用一个变量时,Python 会按照以下顺序在不同的作用域中查找该变量: Local(局部作用域):函数内部定义的变量和参数,只在函数内部可见。 Enclosing(闭包作用域):嵌套函数中,内部函数可以访问外部函数的局部变量,这些外部函数的局部变量所在的作用域就是闭包作用域。 Global(全局作用域):在模块级别定义的变量和函数,在整个模块内都可以访问。 Built – in(内置作用域):Python 内置的函数和变量,如 print、len 等,在任何地方都可以访问。
  • 目录
    • 一、LEGB 规则
    • 二、作用域实例
      • 2.1 局部作用域(Local)
      • 2.2 闭包作用域(Enclosing)
      • 2.3 全局作用域(Global)
      • 2.4 内置作用域(Built – in)
      • 2.5 作用域的嵌套和查找顺序

    LEGB 规则是 Python 查找变量的顺序,即当在代码中引用一个变量时,Python 会按照以下顺序在不同的作用域中查找该变量:

    • Local(局部作用域):函数内部定义的变量和参数,只在函数内部可见。
    • Enclosing(闭包作用域):嵌套函数中,内部函数可以访问外部函数的局部变量,这些外部函数的局部变量所在的作用域就是闭包作用域。
    • Global(全局作用域):在模块级别定义的变量和函数,在整个模块内都可以访问。
    • Built – in(内置作用域):Python 内置的函数和变量,如 printlen 等,在任何地方都可以访问。

    局部作用域是指函数内部的作用域,函数内部定义的变量和参数只能在该函数内部访问。

    def test_function():
        # 局部变量
        local_variable = 10
        print(local_variable)
    test_function()
    # 以下代码会报错,因为 local_variable 是局部变量,在函数外部无法访问
    # print(local_variable)

    当一个函数嵌套在另一个函数内部,并且内部函数引用了外部函数的局部变量时,就形成了闭包。内部函数可以访问外部函数的局部变量,即使外部函数已经执行完毕。

    def outer_function():
        # 外部函数的局部变量
        enclosing_variable = 20
        def inner_function():
            # 内部函数可以访问外部函数的局部变量
            print(enclosing_variable + 1)
        return inner_function
    closure = outer_function()
    closure()

    全局作用域是指在模块级别定义的变量和函数,在整个模块内都可以访问。可以使用 global 关键字在函数内部修改全局变量。

    # 全局变量
    def modify_global():
        global global_variable  # 申明修改全局变量
        global_variable = 50  # 函数内部修改全局变量
        return global_variable
    print(global_variable)
    print(modify_global())

    内置作用域包含了 Python 内置的函数和变量,如 printlenint 等,这些函数和变量在任何地方都可以直接使用。

    # 使用内置函数 len
    my_list = [1, 2, 3]
    length = len(my_list)
    print(length)

    当在代码中引用一个变量时,Python 会按照 LEGB 规则从内到外依次查找该变量。如果在局部作用域中找到了该变量,则使用该变量;如果没有找到,则继续在闭包作用域中查找,以此类推。

    # 全局变量
    x = 10
    def outer():
        # 闭包作用域变量
        x = 20
        def inner():
            # 局部变量
            x = 30
            print(x)  # 输出 30
        inner()
        print(x)  # 输出 20
    outer()
    print(x)  # 输出 10
    • 在上述代码中,inner 函数内部的 print(x) 会先在局部作用域中查找 x,找到局部变量 x = 30 并输出;
    • outer 函数内部的 print(x) 会在闭包作用域中查找 x,输出闭包作用域变量 x = 20
    • 最后,在全局作用域中调用 print(x) 会输出全局变量 x = 10

    到此这篇关于【Python】python系列之函数作用域的文章就介绍到这了,更多相关python函数作用域内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python中的函数作用域
    • 基于Python函数的作用域规则和闭包(详解)
    • 详解Python函数作用域的LEGB顺序
    • 深入解析Python中函数的参数与作用域
    • Python函数命名空间和作用域(Local与Global)
    • python函数的作用域及关键字详解

    站内搜索