首页 > 试题广场 >

以下Python代码执行后,输出的结果是? def crea

[单选题]
以下Python代码执行后,输出的结果是?
def create_counter():
    count = 0
    def counter():
        nonlocal count
        count += 1
        return count
    return counter
c1 = create_counter()
c2 = create_counter()
print(c1(), c1(), c2())
  • 1 2 1
  • 1 1 1
  • 0 1 0
  • 报错(UnboundLocalError)

Python 的规则是:

只要在函数体内出现赋值语句,变量就被判定为“局部变量”

也就是说,解释器在编译阶段看到:

	
count += 1

就等价于:

	
count = count + 1

于是它认为:

  • count是counter的 局部变量

  • 但在局部作用域中,count还没被赋值

  • 所以:❌ 报错


发表于 2026-01-27 21:55:33 回复(0)
# 如果没有 nonlocal count,这里会报错 
count += 1 # UnboundLocalError!
  1. c1 = create_counter():创建第一个计数器实例,count=0
  2. c2 = create_counter():创建第二个独立的计数器实例,count=0
  3. c1():第一次调用,count从 0 变为 1,返回 1
  4. c1():第二次调用,count从 1 变为 2,返回 2
  5. c2():调用第二个计数器,count从 0 变为 1,返回 1
发表于 2025-10-24 17:54:10 回复(1)