我正在尝试用两个内部函数编写一个闭包,但是我收到了以下错误
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())
我有以下错误:
>>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
我的要求是在输入4后,它应显示:
4
5
我是python的新手,有人可以帮助我吗...提前感谢
答案 0 :(得分:1)
看起来更像你想要的东西:
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())
输出:
0
1
1
2
以4
作为输入:
f_current, f_counter = factory(4)
print(f_current())
print(f_counter())
4
5
factory()
返回两个内部函数。您需要使用nonlocal
来增加封闭函数的n
。如果没有nonlocal
,您将无法修改n
,但会获得:
UnboundLocalError: local variable 'n' referenced before assignment
因为n
只是一个局部变量。 nonlocal n
使得n
来自内部函数内部可修改的封闭函数。在n
中评估current
很好,因为Python的范围规则允许对外部作用域的变量进行读取访问,这里是从封闭函数的范围。
答案 1 :(得分:0)
嗨,迈克,我认为非本地没有任何意义,我给 适用于我的情况的解决方案。
def factory(n):
def current():
return n
def counter():
n=int(current())
n=n+1
return n
return current, counter
n=0
f_current, f_counter = factory((input()))
print(f_current())
print(f_counter())
答案 2 :(得分:0)
def factory(n=0):
def current():
return n
def counter():
return n+1
return current, counter
f_current, f_counter = factory(int(input()))
print(f_current())
print(f_counter())
答案 3 :(得分:0)
Mike的Nonlocal用法非常好,但是我们也可以通过Counter内部函数内部的新变量m从封闭范围访问n的变量值,并在递增后返回它。这样,不需要Nonlocal。
def factory(n=0):
def current():
return n
def counter():
m=n
m=m+1
return m
return current,counter
f_current,f_counter=factory(int(input()))
print(f_current())
print(f_counter())
`