# -*- coding: utf-8 -*-

class Library(object):
def __init__(self):
self.books = { 'title' : 'a', 'title2' : 'b', 'title3' : 'c', } def __getitem__(self, i):
return self.books[i] def __iter__(self):
# 方法1 使用生成器
for titles in self.books:
yield self.books[titles]
# 方法2 使用迭代器
# return self.books.itervalues() library = Library() # 1.普通方法
print library.books['title'] # 2.使用__getitem__
print library['title'] # 3.迭代器
for book in library:
print book

问题:那__getitem__可以替代__iter__方法吗

1.list

# -*- coding: utf-8 -*-

class Library(object):
def __init__(self):
self.books = [ 'title' , 'a', 'title2' , 'b', 'title3' , 'c', ] def __getitem__(self, i):
return self.books[i] # def __iter__(self):
# 方法1 使用生成器
# for titles in self.books:
# yield self.books[titles]
# 方法2 使用迭代器
# return self.books.itervalues() library = Library() # 1.普通方法
print(library.books[1]) # 2.使用__getitem__
print(library[1]) # 3.迭代器
for book in library:
print(book)

结果为

>>>
===================== RESTART: C:/Users/CUI/Desktop/1.py =====================
a
a
title
a
title2
b
title3
c
>>>

2.dict

# -*- coding: utf-8 -*-

class Library(object):
def __init__(self):
self.books = { 'title' : 'a', 'title2' : 'b', 'title3' : 'c', } def __getitem__(self, i):
return self.books[i] # def __iter__(self):
# 方法1 使用生成器
# for titles in self.books:
# yield self.books[titles]
# 方法2 使用迭代器
# return self.books.itervalues() library = Library() # 1.普通方法
print(library.books[1]) # 2.使用__getitem__
print(library[1]) # 3.迭代器
for book in library:
print(book)

结果为:

>>>
===================== RESTART: C:/Users/CUI/Desktop/1.py =====================
Traceback (most recent call last):
File "C:/Users/CUI/Desktop/1.py", line 20, in <module>
print(library.books[1])
KeyError: 1
>>>

结论:当字段为索引行数据类型(如:list, tuple,str)时,可以替换,当字段为hash型类型(如dict,set)时,不能替换。

python 中__getitem__ 和 __iter__ 的区别的更多相关文章

  1. Python中生成器和迭代器的区别(代码在Python3.5下测试):

    https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...

  2. Python中type与Object的区别

    Python中type与Object的区别 在查看了Python的API后,总算明白了.现在总结如下: 先来看object的说明: Python中关于object的说明很少,甚至只有一句话: clas ...

  3. Python中的is和==的区别,==判断值是否相等,is判断地址是否一致

    Python中的is和==的区别 Python中的对象包含三要素:id.type.value. 其中id用来唯一标示一个对象,type标识对象的类型,value是对象的值. is判断的是a对象是否就是 ...

  4. 基于python中staticmethod和classmethod的区别(详解)

    例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object):   def foo(self,x):     print "executing foo ...

  5. Python中send()和sendall()的区别

    Python中send()和sendall()的区别 估计每个学习Python网络编程的人,都会遇到过这样的问题: send()和sendall()到底有什么区别? send()和sendall()原 ...

  6. Python中的is和==的区别

    Python中的is和==的区别 1. is 是比较内存地址id() a = "YongJie" b = "YongJie" print(id(a)) #233 ...

  7. python中_new_()与_init_()的区别

    __new__方法的使用 只有继承于object的新式类才能有__new__方法,__new__方法在创建类实例对象时由Python解释器自动调用,一般不用自己定义,Python默认调用该类的直接父类 ...

  8. python中break和continue的区别

    python中break和continue的区别   break和continue 1.break 意思为结束循环   例: i = 0 while i<10:     i+=1     if ...

  9. 从python中copy与deepcopy的区别看python引用

    讨论copy与deepcopy的区别这个问题要先搞清楚python中的引用.python的内存管理. python中的一切事物皆为对象,并且规定参数的传递都是对象的引用.可能这样说听起来比较难懂,对比 ...

随机推荐

  1. 20135234mqy 实验四

    北京电子科技学院(BESTI) 实     验    报     告 课程:java程序设计 班级:1352  姓名:mqy  学号:20135234 成绩:            指导教师:娄嘉鹏  ...

  2. 安装AndroidJDK的坑

    最近公司要用weex了,先开始搭一下环境,真的都是坑,写下来大家引以为鉴,我踩坑三天的后果. 首先要安装JavaJDK这个过程就不写了都是程序员网上搜索一下很多,注意找论坛上最新的帖子来看,这里有一个 ...

  3. Software Defined Networking(Week 3, part 1)

    Control and Data Plane Seperation 课程地址 Overview 今天正式地学习一个控制与数据平面分离.学习完本节,应该要掌握何为控制和数据平面,了解它们的功能以及好处, ...

  4. BUAA软工个人作业Week2-代码复审

    一. 代码复审Check List 1.概要部分 代码能符合需求和规格说明么? 对-c的测试: 可以看到程序不支持1000000的数独终局输出,读源码发现常量MaxCounts定义为了100000,导 ...

  5. app token session rsp

    引用:https://blog.csdn.net/jack85986370/article/details/51362278 一.登录机制 粗略地分析, 登录机制主要分为登录验证.登录保持.登出三个部 ...

  6. 课堂作业:alpha发布点评

    1.  新蜂 项目:游戏俄罗斯方块 基础玩法已实现,部分功能尚不完备,总的来说已经很出色了.不过希望下降加速那部分可以优化一下,不要按住↓加速,而是按一下就使当前方块加速下落至底部就好了. 2.  天 ...

  7. PAT 1072 开学寄语

    https://pintia.cn/problem-sets/994805260223102976/problems/994805263964422144 1072 开学寄语(20 分)提问 下图是上 ...

  8. Hadoop初探

    本文转自:https://blog.csdn.net/column/details/14334.html 前言 Hadoop是什么? 用百科上的话说:“Hadoop是一个由Apache基金会所开发的分 ...

  9. yaf windows安装

    1.需要先下载 php_yaf模块.地址(http://pecl.php.net/package/yaf/2.3.2/windows) 看清你的php版本,然后在phpinfo中看Achitectur ...

  10. [转帖 cnblog 的news ]技术实力超群的Netflix,为何没有CTO

    技术实力超群的Netflix,为何没有CTO https://news.cnblogs.com/n/581824/ 投递人 itwriter 发布于 2017-11-05 16:12 评论(2) 有1 ...