当前位置: 首页 > article >正文

python 变量范围的定义与用法

文章目录

      • 1. 局部变量(Local Scope)
        • 示例:
      • 2. 嵌套函数变量(Enclosing Scope)
        • 示例:
        • 说明:
      • 3. 全局变量(Global Scope)
        • 示例:
        • 说明:
      • 4. 内置变量(Built-in Scope)
        • 示例:
      • 作用域规则(LEGB 规则)
      • 示例:LEGB 规则
        • 说明:
      • 总结

在 Python 中,变量的作用域(scope)决定了变量在程序中的可见性和生命周期。Python 中有以下几种作用域:

  1. 局部变量(Local Scope):

    • 在函数内部定义的变量。
    • 只能在函数内部访问。
    • 函数执行结束后,局部变量会被销毁。
  2. 嵌套函数变量(Enclosing Scope):

    • 在外层函数中定义的变量,可以被内层函数访问。
    • 使用 nonlocal 关键字可以在内层函数中修改外层函数的变量。
  3. 全局变量(Global Scope):

    • 在模块级别定义的变量。
    • 可以在整个模块中访问。
    • 使用 global 关键字可以在函数内部修改全局变量。
  4. 内置变量(Built-in Scope):

    • Python 内置的变量和函数(如 printlen 等)。
    • 可以在任何地方访问。

1. 局部变量(Local Scope)

局部变量是在函数内部定义的变量,只能在函数内部访问。函数执行结束后,局部变量会被销毁。

示例:
def my_function():
    x = 10  # 局部变量
    print(x)

my_function()  # 输出 10
print(x)  # 报错:NameError: name 'x' is not defined

2. 嵌套函数变量(Enclosing Scope)

嵌套函数变量是在外层函数中定义的变量,可以被内层函数访问。如果内层函数需要修改外层函数的变量,需要使用 nonlocal 关键字。

示例:
def outer_function():
    x = 10  # 外层函数的变量

    def inner_function():
        nonlocal x  # 声明 x 是外层函数的变量
        x = 20  # 修改外层函数的变量
        print("Inner:", x)

    inner_function()
    print("Outer:", x)

outer_function()

输出:

Inner: 20
Outer: 20
说明:
  • nonlocal 用于声明变量是外层函数的变量,而不是局部变量。
  • 如果没有 nonlocalx = 20 会在 inner_function 中创建一个新的局部变量,而不会修改外层函数的变量。

3. 全局变量(Global Scope)

全局变量是在模块级别定义的变量,可以在整个模块中访问。如果函数内部需要修改全局变量,需要使用 global 关键字。

示例:
x = 10  # 全局变量

def my_function():
    global x  # 声明 x 是全局变量
    x = 20  # 修改全局变量
    print("Inside function:", x)

my_function()
print("Outside function:", x)

输出:

Inside function: 20
Outside function: 20
说明:
  • global 用于声明变量是全局变量,而不是局部变量。
  • 如果没有 globalx = 20 会在 my_function 中创建一个新的局部变量,而不会修改全局变量。

4. 内置变量(Built-in Scope)

内置变量是 Python 内置的变量和函数,可以在任何地方访问。

示例:
print(len("Hello"))  # 使用内置函数 len

输出:

5

作用域规则(LEGB 规则)

Python 使用 LEGB 规则来确定变量的作用域:

  1. L(Local): 局部作用域。
  2. E(Enclosing): 嵌套函数作用域。
  3. G(Global): 全局作用域。
  4. B(Built-in): 内置作用域。

Python 会按照 LEGB 的顺序查找变量。如果局部作用域中没有找到变量,会继续在嵌套函数作用域、全局作用域和内置作用域中查找。


示例:LEGB 规则

x = 10  # 全局变量

def outer_function():
    x = 20  # 嵌套函数变量

    def inner_function():
        x = 30  # 局部变量
        print("Local:", x)

    inner_function()
    print("Enclosing:", x)

outer_function()
print("Global:", x)

输出:

Local: 30
Enclosing: 20
Global: 10
说明:
  • inner_function 中的 x 是局部变量。
  • outer_function 中的 x 是嵌套函数变量。
  • 模块级别的 x 是全局变量。

总结

关键字作用域用途
局部作用域在函数内部定义变量。
nonlocal嵌套函数作用域在内层函数中修改外层函数的变量。
global全局作用域在函数内部修改全局变量。
内置作用域使用 Python 内置的变量和函数。
  • 使用 nonlocalglobal 可以明确变量的作用域,避免意外的变量覆盖。
  • 如果不使用 nonlocalglobal,Python 会默认创建局部变量。

http://www.kler.cn/a/521168.html

相关文章:

  • WPS数据分析000005
  • 健康AI应用的逆袭:如何用“死亡时钟”撬动用户增长和媒体关注,实现应用榜快速排名第六
  • 小阿卡纳牌
  • 【设计模式-行为型】访问者模式
  • 关于低代码技术架构的思考
  • 动手学图神经网络(8):在消息传递中定制聚合操作
  • 汽车网络信息安全-ISO/SAE 21434解析(中)
  • 拖拽移动(Semi Design)
  • 《一起做很甜的梦!》
  • sqlite3 学习笔记
  • 数据分箱 baggingboosting onehot独热编码 woe编码 sklearn的ensemble(集成学习)
  • python:taichi 高性能可视化 Demo 展览
  • 基于SpringBoot的母婴护理知识共享管理系统
  • 代码随想录算法【Day32】
  • Go中的Context(上下文)
  • ESP8266基于WiFiManager设置页面添加参数并且掉电不丢失
  • GIT管理指令
  • Object类(1)
  • Qt Enter和HoverEnter事件
  • 硬件学习笔记--36 TTL、RS232、RS485相关介绍
  • Linux相关概念和易错知识点(26)(命名管道、共享内存)
  • PostGIS笔记:PostgreSQL 数据库与用户 基础操作
  • 使用ensp进行ppp协议综合实验
  • API接口开发淘宝商品数据一键解析获取商品信息编写
  • Linux Ubuntu 18.04下创建桌面快捷方式
  • 云原生:构建现代化应用的基石