【Python】关于map()参数func执行问题
今天遇见了一奇怪的现象,起初百思不得其解,于是记录下来
问题描述
请看如下代码
def func(num):
print(num)
if __name__ == '__main__':
map(func, range(10))
执行结果会是什么?
A:什么也不输出
Process finished with exit code 0
B:输出0-9
0
1
2
3
4
5
6
7
8
9
Process finished with exit code 0
答案是A,什么也不输出
问题解决
法1
套上list()强制转换为列表
def func(num):
print(num)
if __name__ == '__main__':
# 套上list()强制转换为列表
list(map(func, range(10)))
法2
对map()结果遍历
def func(num):
print(num)
if __name__ == '__main__':
# 对其遍历
for item in map(func, range(10)):
pass
则运行结果会如答案B输出
原理
参考:https://stackoverflow.com/questions/7731213/print-doesnt-print-when-its-in-map-python
解决方法有很多,只要了解其原理此问题便迎刃而解
其实非常简单
map()
函数返回的是一个generator
,只有遍历(iterate)该generator
函数func(num)
才会真正执行
何为
generator
?推荐以下文章
于是一切都清晰了,我们甚至可以一个一个执行,随心所欲
def func(num):
print(num)
if __name__ == '__main__':
mapper = map(func, range(10))
next(mapper)
next(mapper)
next(mapper)
输出
0
1
2
Process finished with exit code 0