Python:映射调用函数不起作用

Ank*_*nki 4 python functional-programming map

映射不调用正在传递的函数.

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))
Run Code Online (Sandbox Code Playgroud)

在新行上预期的操作:Hello Hello Hello Hello Hello

任何帮助将不胜感激....

pan*_*ear 21

在Python 3中,地图值被懒惰地评估.也就是说,每个值仅在需要时计算.你会发现无论你使用什么函数,它都不会被调用,直到你在映射结果中询问该项的值,无论是使用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
Run Code Online (Sandbox Code Playgroud)

或这个:

>>> b = list(map(obj.getDateTimeStat,data))
Hello
Hello
Hello
Hello
Hello
Run Code Online (Sandbox Code Playgroud)

或者其他各种各样的事情.


Ble*_*der 6

Python 3中的map功能是懒惰的,不像Python 2分的map

你必须以某种方式消费它:

for result in map(...):
    pass
Run Code Online (Sandbox Code Playgroud)

Python3中地图的非懒惰评估版本?重点介绍了一些更优雅的解决方案。