zoukankan      html  css  js  c++  java
  • python第十四天

    关于类 map

    通过文档,可以明确得知, map 是一个类, 不是内置函数

    1. 先看简单使用例子:   题目: 1个数字列表, 求一个新列表, 新列表的每个元素,都是旧列表元素的 平方

    1 res = map(lambda x: x*x, [1, 2, 3, 4, 5])    迭代一个列表, 每个元素的平方
    2 print(res)                                   <map object at 0x10e1d9470>  
    3 print(list(res))                             [1, 4, 9, 16, 25]

    通过第 2行 打印结果得知,  res 是 map 实例

    第三行, 通过 list()  强制转换, 得到 新列表

    2. 注意一个细节, 如果 在第3行代码下, 在 强制 转换一次 res , 会是什么结果呢?

    1 res = map(lambda x: x*x, [1, 2, 3, 4, 5])
    2 print(res)
    3 print(list(res))
    4 print(list(res))

    见证奇迹的结果如下:

    <map object at 0x10a0c4470>
    [1, 4, 9, 16, 25]
    []                          第4行, 打印结果是个 空 列表

    3. 在第2部分代码 先加个 next 取值, 试试

    1 res = map(lambda x: x*x, [1, 2, 3, 4, 5])
    2 print(res)
    3 print(next(res))          增加第3行代码, 先使用next, 从res 取值
    4 print(list(res))
    5 print(list(res))

    看结果:

    <map object at 0x101596470>
    1                          next(res) 打印为 1, 符合预期
    [4, 9, 16, 25]             将 res 强制转成列表, 是除了 1 之外的 后续元素
    []

    4 . 查阅文档, map类, 有 两个方法: __iter__   __next__

       也可以通过  print(dir(res)) ,  可以看到 有如上上两个方法

       这说明, map类  实例对象,  res  是一个生成器对象, 

      每调用一次 next 之后,  就会指向下一个元素.

       for 循环遍历 也应是 next 用法, 只能遍历一次, 再次遍历就是 空列表

    5. 把第 3部分的代码再改下,看看神奇效果

    1 res = map(lambda x: x*x, [1, 2, 3, 4, 5])
    2 print('使用next',next(res))
    3 for item in res:
    4     print('for循环', item)
    5 print('list转换',list(res))

     查看结果:

    使用next 1
    for循环 4
    for循环 9
    for循环 16
    for循环 25
    list转换 []

    结论:  对于生成器对象, 取值, 是逐个单向取值, 一旦被取出,就不能再次取值.

     建议读者, 根据 代码,  自行体会, 总结, 会更深刻.

    扩展:

           像类似 map 的还有一些, 比如, filter, zip 等都是同样的,

           都是属于生成器对象.

           既然是生成器对象, 那就得符合  生成器对象 的规则 

  • 相关阅读:
    Python中os与sys两模块的区别
    单线程爬取图片
    linux下glances服务器监控工具
    python中的join()函数的用法
    python的exec、eval详解
    mongodb启动不了解决方法
    生产者和消费者(.net实现)
    IOS开发--第一阶段--导行(1)(基本概念)
    12.26 linux基本操作指令
    12.25
  • 原文地址:https://www.cnblogs.com/golzn2018/p/9520408.html
Copyright © 2011-2022 走看看