许连明
python3.6.5中的map函数
2018-6-19 16:35
阅读:2663
标签:python3, map, 函数

 

各位在用map函数时是不是也有个疑问,特别是3.x以上的版本,在2.x的版本中map函数很好理解,现在版本升级了反而越来越难搞了,map这个函数在高版本中竟然是一个对象了??!完全是一脸懵逼的,而map后的对象有种“阅后即焚”的感觉,不信咱试试哈。如下举例:


1、想获取对象中的东西,也就是该对象到底是啥?

>>> a=[[1, 2,3, 4,6], [2, 3,4, 5,6]]
>>> a2=map(set, a)
>>> a2
<map object at 0x000000000C462438>
#a2是个对象啊
#将a2中的东西全部打印出来
>>> for item in a2:
	print(item)

	
{1, 2, 3, 4, 6}
{2, 3, 4, 5, 6}

>>> a2
<map object at 0x000000000C462438>
#再次查看a2地址没变,但是再次遍历打印为空
>>> for item in a2:
	print(item)


#a2再也不愿意出来了见客了,只能使用它一次,再用它就不理你了	
>>> list(a2)
[]
#list后为空


2、将对象转化为列表,仍旧只能用一次,惹不起

>>> b=[[1, 2,3, 4,6], [2, 3,4, 5,6]]
>>> b2=map(set,b)
>>> b2
<map object at 0x0000000002F49F60>
>>> list(b2)
[{1, 2, 3, 4, 6}, {2, 3, 4, 5, 6}]
>>> b2
<map object at 0x0000000002F49F60>
#用过一次它就消失了
>>> list(b2)
[]
>>> for ii in b2:
	print(ii)

	
>>>


3、直接赋值式复制不能备份


>>> c=[[1, 2,3, 4,6], [2, 3,4, 5,6]]
>>> c2=map(set,c)
>>> c3=c2
>>> for ij in c2:
	print(ij)

	
{1, 2, 3, 4, 6}
{2, 3, 4, 5, 6}
>>> list(c3)
[]
>>>


4、copy复制也不行

#浅复制
>>> import copy
>>> f=[[1, 2,3, 4,6], [2, 3,4, 5,6]]
>>> f2=map(set,f)
>>> f3=copy.copy(f2)
>>> f3
<map object at 0x000000000C3D1A58>
>>> f2
<map object at 0x000000000C462748>

#浅复制后的地址不同,我以为要成功了,其实不是
>>> for m in f2:
	print(m)

	
{1, 2, 3, 4, 6}
{2, 3, 4, 5, 6}

>>> for n in f3:
	print(n)

	
>>> 
#仍旧“阅后即焚”

#深复制
>>> import copy
>>> g=[[1, 2,3, 4,6], [2, 3,4, 5,6]]
>>> g2=map(set,g)
>>> g3=copy.deepcopy(g2)
>>> g3
<map object at 0x000000000C462AC8>
>>> g2
<map object at 0x000000000C462908>

>>> list(g2)
[{1, 2, 3, 4, 6}, {2, 3, 4, 5, 6}]
>>> list(g3)
[{1, 2, 3, 4, 6}, {2, 3, 4, 5, 6}]
#深复制后可以啊,可以用了,但仍旧是只能用一次,想用多少次就要先深复制几次

>>> len(list(g3))
0
#无奈而又不失礼貌的微笑


有人要疑惑了,我想知道map后的对象到底是啥都不行吗?这个map太娇气了,欠揍。

我也无奈啊!!!谁知道python开发者到底是咋想的啊,越来越差劲了。


转载本文请联系原作者获取授权,同时请注明本文来自许连明科学网博客。

链接地址:https://wap.sciencenet.cn/blog-1966190-1119748.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?