映射不调用正在传递的函数。
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))
新线上的预期操作: 你好 你好 你好 你好 你好
任何帮助将不胜感激....
答案 0 :(得分:14)
在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
或者这个:
>>> b = list(map(obj.getDateTimeStat,data))
Hello
Hello
Hello
Hello
Hello
或其他各种事情。
答案 1 :(得分:2)
Python 3的map
函数是懒惰的,与Python 2的map
不同。
你必须以某种方式消费它:
for result in map(...):
pass
Non-lazy evaluation version of map in Python3?突出了一些更优雅的解决方案。
答案 2 :(得分:1)
你正在使用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
显示完全会发生什么 - 正如我为你所做的那样。