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