[英]python TypeError: 'int' object is not callable
我有家庭作業,我們需要做類似迭代器的事情,功能很好,但技術人員告訴他使用(t = Make_iterator())這樣運行功能,我做錯了什么? 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())
我認為您想要一個閉包,這是在另一個函數的本地名稱空間內定義的函數,以便它可以訪問外部函數的變量:
def make_iterator(func):
x = -1
def helper():
nonlocal x
x += 1
return func(x)
return helper
nonlocal
語句允許內部函數修改在外部函數中聲明的變量(否則您將得到一個錯誤,或者在不更改外部變量的情況下綁定自己的局部變量)。 它僅在Python 3中添加,因此,如果您仍在使用Python 2,則需要將x
值包裝在可變數據結構(如列表)中。
具有相同想法的另一種方法是編寫類而不是函數。 如果類的實例定義了__call__
方法,則該類的實例可以被調用(就像一個函數一樣):
class MyIterator(object):
def __init__(self, func):
self.index = -1
self.func = func
def __call__(self):
self.index += 1
return self.func(self.index)
如果您需要跟蹤的狀態比本示例中使用的簡單整數索引更復雜(或應該以更復雜的方式更改),則此方法很有用。 它也可以在Python 2中運行,而無需煩人的解決方法。
我認為他想你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()
,它將返回迭代器的下一個值,在您的情況下t = Make_iterator(fn)
0, 2, 4, 6, 8, etc...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.