Python:映射调用一个不起作用的函数
映射不调用正在传递的函数Python:映射调用一个不起作用的函数,python,map,functional-programming,Python,Map,Functional Programming,映射不调用正在传递的函数 class a: def getDateTimeStat(self,datetimeObj): print("Hello") if __name__ == "__main__": obj = a() print("prog started") data = [1,2,3,4,5] b = list(map(obj.getDateTimeStat,data)) 新行上的预期op: 你好 你好 你好 你好 你好 任
class a:
def getDateTimeStat(self,datetimeObj):
print("Hello")
if __name__ == "__main__":
obj = a()
print("prog started")
data = [1,2,3,4,5]
b = list(map(obj.getDateTimeStat,data))
新行上的预期op:
你好
你好
你好
你好
你好
任何帮助都将不胜感激。…在Python3中,映射值的计算是惰性的。也就是说,每个值仅在需要时计算。您会发现,无论使用什么函数,它都不会被调用,除非您在映射结果中请求该项的值,无论是使用
next()
还是其他方法
要获得您想要的,您可以执行以下操作:
>>> b = map(obj.getDateTimeStat,data)
>>> next(b)
Hello
>>> next(b)
Hello
>>> next(b)
Hello
>>> next(b)
Hello
>>> next(b)
Hello
>>> next(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
与Python2的
map
不同,Python3的map
函数是惰性的
你必须以某种方式消费它:
for result in map(...):
pass
突出显示了一些更优雅的解决方案。您正在使用Python 3,对吗
map()
返回Python 3中的迭代器,而不是列表。因此,使用以下任何一种方法强制迭代器生成其结果;比如说,
b = list(map(obj.getDateTimeStat,data))
后来
在这里,我正在运行您当前问题中的确切代码:
class a:
def getDateTimeStat(self,datetimeObj):
print("Hello")
if __name__ == "__main__":
obj = a()
print("prog started")
data = [1,2,3,4,5]
b = list(map(obj.getDateTimeStat,data))
以下是输出:
$ python -V
Python 3.3.2
$ python yyy.py
prog started
Hello
Hello
Hello
Hello
Hello
准确地显示发生了什么-就像我为你做的那样。你期望输出/行为是什么?正如HennyH在StackOverflow上提出的这类问题,通常最好包括程序的输出和您期望的结果。结果,您的方法只会返回一堆
None
s。大家好!我很抱歉没有把输出部分,已经更新了部分。。。谢谢!我看到6行输出:“prog start”和5行“Hello”<代码>映射似乎被调用。你是如何运行你的程序的?嘿,谢谢你的回复,我现在已经编辑了上面的函数,我正在使用一个列表来捕获迭代器值。这里发生的是函数根本没有被调用!谢谢你的评论。。。我遇到的问题是,由于某种原因,函数没有被调用,这很奇怪!谢谢你的评论。。。我遇到的问题是,由于某种原因,函数没有被调用,这很奇怪!如果您尝试访问映射中的值,它将被调用。我建议你仔细阅读懒惰的评估,以了解发生了什么。
$ python -V
Python 3.3.2
$ python yyy.py
prog started
Hello
Hello
Hello
Hello
Hello