我正在尝试编写一个具有两个内部函数的闭包,但出现以下错误
def factory(n=0):
#n=0
def current():
return n
return current
def counter():
n=n+1
return n
return counter
f_current,f_counter = int(input())
print(f_counter())
print(f_current())
Run Code Online (Sandbox Code Playgroud)
我有以下错误:
>>4
Traceback (most recent call last):
File "C:/Users/lokesh/Desktop/python/closure3.py",
line 13, in <module>
f_current,f_counter = int(input())
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)
我的要求是输入4后,它应该显示:
4
5
Run Code Online (Sandbox Code Playgroud)
我是 python 新手,有人可以帮助我吗...提前致谢
这看起来更像你想要的:
def factory(n=0):
def current():
return n
def counter():
nonlocal n
n += 1
return n
return current, counter
f_current, f_counter = factory()
print(f_current())
print(f_counter())
print(f_current())
print(f_counter())
Run Code Online (Sandbox Code Playgroud)
输出:
0
1
1
2
Run Code Online (Sandbox Code Playgroud)
作为4输入:
f_current, f_counter = factory(4)
print(f_current())
print(f_counter())
4
5
Run Code Online (Sandbox Code Playgroud)
factory()返回两个内部函数。您需要使用封闭函数nonlocal来增加表单。n如果没有,nonlocal您将无法修改n,但会得到:
UnboundLocalError: local variable 'n' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
因为n它只是一个局部变量。nonlocal n使得n封闭函数可以在内部函数内部进行修改。评估n很好current,因为 Python 的作用域规则允许从外部作用域(这里是从封闭函数的作用域)读取访问变量。