python类型错误:';int';对象不可调用
我有作业,我们需要做一些类似迭代器的事情,func工作得很好,但是技术人员告诉他用(t=Make_iterator())运行func,就像这样,我做错了什么?tnxpython类型错误:';int';对象不可调用,python,Python,我有作业,我们需要做一些类似迭代器的事情,func工作得很好,但是技术人员告诉他用(t=Make_iterator())运行func,就像这样,我做错了什么?tnx global x x=-1 def Make_iterator(fn): global x x+=1 return fn(x) fn=lambda y:y*2 t=Make_iterator(fn) print(t()) 我想他希望你的Make_iterator函数返回一个充当迭代器的函数。因此,您
global x
x=-1
def Make_iterator(fn):
global x
x+=1
return fn(x)
fn=lambda y:y*2
t=Make_iterator(fn)
print(t())
我想他希望你的
Make_iterator
函数返回一个充当迭代器的函数。因此,您可以将当前的Make_iterator
函数的内容封装在内部函数f
中,并返回:
def Make_iterator(fn):
def f():
global x
x+=1
return fn(x)
return f
现在,如果您执行
t=Make_iterator(fn)
,每次调用t()
时,它都将返回迭代器的下一个值,在您的例子中,0、2、4、6、8等等。
我想他希望您的Make_iterator
函数返回一个充当迭代器的函数。因此,您可以将当前的Make_iterator
函数的内容封装在内部函数f
中,并返回:
def Make_iterator(fn):
def f():
global x
x+=1
return fn(x)
return f
现在如果您执行
t=Make_iterator(fn)
,每次调用t()
它都会返回迭代器的下一个值,在您的例子中,0、2、4、6、8等等。
我想您需要一个闭包,它是在另一个函数的本地命名空间中定义的函数,以便访问外部函数的变量:
def make_iterator(func):
x = -1
def helper():
nonlocal x
x += 1
return func(x)
return helper
非局部
语句允许内部函数修改在外部函数中声明的变量(否则会出现错误,或者在不更改外部变量的情况下绑定自己的局部变量)。它只是在Python3中添加的,因此如果您仍然使用Python2,则需要将x
值包装在可变数据结构中,如列表
实现同样想法的另一种方法是编写类,而不是函数。如果类定义了\uuu call\uu
方法,则类的实例可以调用(就像函数一样):
class MyIterator(object):
def __init__(self, func):
self.index = -1
self.func = func
def __call__(self):
self.index += 1
return self.func(self.index)
如果您需要跟踪的状态比本例中使用的简单整数索引更复杂(或者应该以更复杂的方式更改),那么这将非常有用。它在Python2中也可以工作,没有烦人的解决方法。我想您需要一个闭包,它是在另一个函数的本地名称空间中定义的函数,以便它可以访问外部函数的变量:
def make_iterator(func):
x = -1
def helper():
nonlocal x
x += 1
return func(x)
return helper
非局部
语句允许内部函数修改在外部函数中声明的变量(否则会出现错误,或者在不更改外部变量的情况下绑定自己的局部变量)。它只是在Python3中添加的,因此如果您仍然使用Python2,则需要将x
值包装在可变数据结构中,如列表
实现同样想法的另一种方法是编写类,而不是函数。如果类定义了\uuu call\uu
方法,则类的实例可以调用(就像函数一样):
class MyIterator(object):
def __init__(self, func):
self.index = -1
self.func = func
def __call__(self):
self.index += 1
return self.func(self.index)
如果您需要跟踪的状态比本例中使用的简单整数索引更复杂(或者应该以更复杂的方式更改),那么这将非常有用。它在Python2中也可以工作,没有烦人的变通方法。此答案使用最佳Python实践,应该是公认的答案。此答案使用最佳Python实践,应该是公认的答案。