Я пытаюсь заставить функцию map()
работать внутри класса, но у меня были проблемы, потому что я не уверен, должен ли я передавать себя в нее. Если это так, я не уверен, как сделать 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()
Даже после попытки добавления в пустой список список по-прежнему кажется пустым, что я делаю неправильно в этом примере?
map
не мутирует его аргумент. Он возвращает новый итеративный.
self.nums = list(map(...))
test.fxn
является функцией двух аргументов: self
и num
. self.fxn
- связанный метод одного аргумента: num
. Поскольку вы просто многократно применяете его на self
, вы можете связать его и сохранить дополнительный аргумент.
self.nums = list(map(self.fxn, self.nums))
Вы можете изменить 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 я in self.nums]
и не забудьте изменить fxn()
из self.empty_list.append(num ** num)
чтобы 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()
Выход:
[1, 256, 16777216]