2.4 python3 变量、常量、全局量、局部量

在 Python 中,变量、常量、全局变量等是编程的基本概念,它们用于存储和管理数据。下面详细介绍它们的用法和区别。


1. 变量(Variable)

变量用于存储数据,其值可以随时修改。

特点

  • 使用 = 赋值

  • 变量名区分大小写(如 name 和 NAME 不同)

  • 无需声明类型(动态类型语言)

  • 可以重新赋值

x = 10          # 整数变量
name = "Alice"  # 字符串变量
is_active = True  # 布尔变量

x = 20          # 变量可以重新赋值


命名规则

  • 由字母、数字、下划线 _ 组成

  • 不能以数字开头(如 1var ❌)

  • 避免使用 Python 关键字(如 ifforclass ❌)


2. 常量(Constant)

Python 没有真正的常量,但约定用全大写变量名表示“常量”,表示不应修改。

特点

  • 通常定义在模块顶层

  • 命名全部大写(如 PIMAX_SIZE

  • 逻辑上不可变(但 Python 不强制)

PI = 3.14159          # 常量(约定)
MAX_USERS = 1000      # 常量(约定)

# 虽然可以修改,但不推荐
PI = 3.14  # ❌ 违反约定



3. 全局变量(Global Variable)

全局变量在整个模块(文件)中可用,函数内部访问需用 global 声明。

特点

  • 定义在函数外部

  • 函数内修改需 global 声明

  • 滥用全局变量可能导致代码难以维护

示例

count = 0  # 全局变量

def increment():
    global count  # 声明使用全局变量
    count += 1

increment()
print(count)  # 输出 1


避免滥用全局变量

# 不推荐:过多全局变量
x = 10
y = 20
z = 30

# 推荐:用类或函数封装
class Config:
    X = 10
    Y = 20
    Z = 30



4. 局部变量(Local Variable)

局部变量仅在函数或代码块内部有效。

特点

  • 定义在函数内部

  • 函数外无法访问

  • 生命周期仅限于函数执行期间

def greet():
    message = "Hello"  # 局部变量
    print(message)

greet()       # 输出 "Hello"
print(message) # ❌ 报错:message 未定义



5. 非局部变量(Nonlocal Variable)

用于嵌套函数中,修改外层(非全局)变量。

特点

  • 用于闭包或嵌套函数

  • 使用 nonlocal 声明

  • 比 global 更安全

def outer():
    x = 10          # 外层变量
    def inner():
        nonlocal x  # 声明修改外层变量
        x = 20
    inner()
    print(x)        # 输出 20

outer()



6. 变量作用域优先级

Python 变量查找顺序(LEGB 规则):

  1. L(Local):局部作用域(函数内部)

  2. E(Enclosing):嵌套函数的外层作用域

  3. G(Global):全局作用域(模块级别)

  4. B(Built-in):内置作用域(如 printlen

x = "global"  # 全局变量

def outer():
    x = "outer"  # 嵌套作用域
    def inner():
        x = "inner"  # 局部变量
        print(x)     # 输出 "inner"
    inner()
    print(x)        # 输出 "outer"

outer()
print(x)            # 输出 "global"

总结

类型定义位置作用域是否可变示例
变量任意位置取决于定义位置x = 10
常量模块顶层(约定)全局❌(约定)PI = 3.14
全局变量模块顶层全局count = 0
局部变量函数内部函数内def f(): x = 1
非局部变量嵌套函数外层函数nonlocal x

最佳实践:

  • 尽量使用局部变量,避免全局变量

  • 常量用全大写命名(如 MAX_SIZE

  • 需要跨函数共享数据时,考虑用类或返回值传递


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值