C语言 static 声明静态变量?

本文转载了一篇技术相关的文章,具体内容请访问原文链接。
在 Python 中没有直接的“静态变量”关键字,但可以通过类的属性和装饰器来模拟类似 C 语言中的静态变量行为。Python 中的类级别变量(class-level variables)可以被类的所有实例共享,这种变量的行为类似于静态变量。 下面是一个示例,展示如何在 Python 中定义类似 C 语言静态变量: ```python class StaticVariableSimulator: # 类级别的变量,相当于静态变量 static_var = 0 def __init__(self): # 实例变量 self.instance_var = 0 def increment_static(self): # 增加静态变量 StaticVariableSimulator.static_var += 1 def increment_instance(self): # 增加实例变量 self.instance_var += 1 # 使用示例 obj1 = StaticVariableSimulator() obj2 = StaticVariableSimulator() obj1.increment_static() obj1.increment_instance() obj2.increment_static() obj2.increment_instance() print("Static variable value:", StaticVariableSimulator.static_var) # 输出 2 print("Instance variable from obj1:", obj1.instance_var) # 输出 1 print("Instance variable from obj2:", obj2.instance_var) # 输出 1 ``` ### 解释: - `static_var` 是类 `StaticVariableSimulator` 的类级别变量(class-level variable),它被所有实例共享。 - 每个实例都有自己的 `instance_var`,它是实例级别的变量。 - 当我们通过类名 `StaticVariableSimulator` 访问 `static_var` 并对其进行修改时,这个变量的变化对所有实例都是可见的。 - 如果我们通过实例访问并修改 `static_var`,实际上会创建一个与类变量同名的实例变量,遮蔽类变量。 ### 注意事项: - 如果你直接通过实例修改类变量(静态变量),例如 `self.static_var += 1`,这不会修改类变量,而是创建一个同名的实例变量。因此,建议使用类名来修改类变量,如 `StaticVariableSimulator.static_var += 1`。 --- ### 使用装饰器模拟函数级别的“静态变量” 如果你希望在函数中模拟静态变量(类似 C 函数中的 `static` 变量),可以使用装饰器或闭包: ```python def static_vars(**kwargs): def decorate(func): for k, v in kwargs.items(): setattr(func, k, v) return func return decorate @static_vars(counter=0) def foo(): foo.counter += 1 return foo.counter # 使用 print(foo()) # 输出 1 print(foo()) # 输出 2 print(foo()) # 输出 3 ``` ### 解释: - `@static_vars(counter=0)` 装饰器为函数 `foo` 添加了一个属性 `counter`,它在多次调用之间保持状态。 - 每次调用 `foo()` 都会修改 `foo.counter`,这与 C 中的静态变量行为类似。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值