python中object的用法_python中使用zip函数出现<zip object at 0x02A9E418>

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

zip方法在Python 2 和Python 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

# 可以看到这里返回的是一个对象,这里就是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 "", line 1, in

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

>>> 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值