zoukankan      html  css  js  c++  java
  • python中使用zip函数出现<zip object at 0x02A9E418>

    Python中使用zip函数,出现<zip object at 0x02A9E418>错误的原因是,你是用的是python2点多的版本,python3.0对python做了改动

    1. zip方法在Python 2 和Python 3中的不同
    2. 为何有这种不同
    3. 更多注解


    问题一:zip方法在Python 2 和Python 3中的不同
    Python 2 的代码演示:

    $ python2
    >>> a = zip((1, 2), (3, 4))
    >>> a
    [(1, 2), (3, 4)]
    #  可以看到这里返回的是一个list
    

    Python 3 的代码演示:

    $ python3
    >>> a = zip((1, 2), (3, 4))
    >>> a
    <zip object at 0x1007096c8>
    # 可以看到这里返回的是一个对象,这里就是2和3的不同点
    >>> dir(a)  # 查看a的相关属性
    ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__'
    , '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__',
     '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'
    ]
    # 这里值得注意的是 '__iter__' 和 '__next__' 方法,说明a是一个支持遍历的对象
    # 既然知道了a是一个支持遍历的对象,我们也就基本明白了a的用法了
    ### 和Python2的区别(一):返回的是一个支持遍历的对象,而不是一个list本身
    >>> for i in a: print i  # in 方法
    ...
    (1, 3)
    (2, 4)
    >>> next(a)  # 我们测试__next__方法
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration  # 说明next方法是支持的,但是这里也说明了对象只能遍历一次
    >>> a = zip((1, 2), (3, 4))  # 这里需要重新赋值,因为这个对象只能遍历一次
    >>> next(a)
    (1, 3)  # 运行良好
    ### 返回的对象支持遍历的操作
    

    问题二:为何有这种不同
    我想最重要的原因是节约了不少的内存吧。Python的运行效率和编译类型的语言自然是没法比,但是能优化就优化一点吧~谁不想有更高的追求呢。
    问题三:更多注解
    这个zip在不同版本的不同反应了python的一个演变:大部分返回list的函数不在返回list,而是返回一个支持遍历的对象,比如map、fiter之类的,基本的例子如下:

    $ python3
    >>> a = map(abs, [1, 2, -3])
    >>> a
    <map object at 0x100707ed0>
    >>> list(a)  # 如果不习惯,可以自己手动转化为list,也是写兼容代码需要注意的地方
    [1, 2, 3]
    
    $ python2
    >>> a = map(abs, [1, 2, -3])
    >>> a
    [1, 2, 3] 
    
    所以运行方法是
    >>> t=['name','age','gender']
    >>> t2=['milo',30,'male']

    >>> for each in zip(t,t2):
        print(each)

    运行结果:

    ('name', 'milo')
    ('age', 30)
    ('gender', 'male')


    for each in zip(t,t2):
        print(each)
  • 相关阅读:
    Mac Sublime Text 3 配置Python环境及安装插件
    iOS 简单易用的二维码扫描及生成二维码三方控件LFQRCode,可灵活自定义UI
    iOS 自定义相机带拍摄区域边框及半透明遮罩层(含源码)
    Xcode8 不能显示blame,show blame for line 灰色不可点解决办法
    github + SourceTree管理自己的库并上传到cocoapods及各种坑的解决办法
    Mysql查询的一些操作(查表名,查字段名,查当月,查一周,查当天)
    SqlServer表结构查询
    NET(C#):XmlArrayItem特性和XmlElement特性在序列化数组的差别
    Git常用命令
    MySQL添加用户、删除用户与授权
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/6042336.html
Copyright © 2011-2022 走看看