You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么这个简单的Python计数函数仅首次调用计数结果正确?

问题根因

你代码的核心问题是变量作用域冲突和参数值传递规则:

  • 函数add的形参count是独立的局部变量,和外层定义的全局count属于两个完全不同的存储空间,修改局部变量不会对全局变量产生任何影响
  • 每次调用add时都是把当前值始终为0的全局count的值拷贝给形参,函数内加1后输出1,函数执行结束后局部变量就被销毁,所以多次调用永远输出1,全局count始终未被修改,外部打印自然永远为0

可行的解决方案

方案1:使用global声明调用全局变量(最简单快速)

去掉函数的count形参,用global关键字声明函数内部操作的是全局count变量:

count = 0

def add():
    global count
    count += 1
    print(count)

# 调用测试
add() # 输出1
add() # 输出2
print(count) # 输出2

方案2:用类实现计数器(适合复杂扩展场景,避免全局变量污染)

class Counter:
    def __init__(self):
        self.count = 0
    
    def add(self):
        self.count += 1
        print(self.count)

# 调用测试
counter = Counter()
counter.add() # 输出1
counter.add() # 输出2
print(counter.count) # 输出2

方案3:用闭包实现轻量计数器(无全局变量,无需实例化类)

def create_counter():
    count = 0
    def add():
        nonlocal count
        count += 1
        print(count)
    return add

# 调用测试
add = create_counter()
add() # 输出1
add() # 输出2

内容的提问来源于stack exchange,提问作者DDDritte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:57:00