我一直试图让map()
函数在类中工作,但是遇到了麻烦,因为我不确定是否应该将self传递给它。如果是这样,我不确定如何将self
放入列表以与其他可迭代对象一起使用。到目前为止,这是我的代码:
from itertools import repeat
class test:
def __init__(self):
self.nums = [1, 4, 8]
self.empty_list = []
map(self.fxn, repeat(self, len(self.nums)), self.nums)
print(self.empty_list)
def fxn(self, num):
self.empty_list.append(num ** num)
instance = test()
即使试图追加到空列表之后,列表似乎仍然是空白的,在该示例中我在做什么错了?
答案 0 :(得分:3)
map
不会改变其参数。它返回一个新的可迭代对象。
self.nums = list(map(...))
test.fxn
是两个参数的函数:self
和num
。 self.fxn
是一个带有num
参数的绑定方法。由于您只是在self
上重复应用它,因此可以绑定它并为自己节省额外的参数。
self.nums = list(map(self.fxn, self.nums))
答案 1 :(得分:1)
您可以将map(self.fxn, repeat(self, len(self.nums)), self.nums)
更改为self.empty_list=list(map(self.fxn,self.nums))
,相当于self.empty_list=list(map(lambda x: self.fxn(x),self.nums))
和self.empty_list=[self.fxn(i) for i in self.nums]
,并记住将fxn()
从self.empty_list.append(num ** num)
更改为{{ 1}}(并且由于它是return num ** num
-list(map(...))
的列表),因此请尝试以下操作:
list
输出:
class test:
def __init__(self):
self.nums = [1, 4, 8]
self.empty_list=list(map(self.fxn,self.nums))
print(self.empty_list)
def fxn(self, num):
return num ** num
instance = test()