getitem一拦截索引运算

__getitem__方法拦截实例的索引运算。当实例x出现在x[i]这样的索引运算中时,Python会调用这个实例继承的__getitem__方法(如果有的话),把x作为第一个参数传递,并且方括号内的索引值传给第二个参数。例如,下面的类将返回索引值的平方。

#!/usr/bin/env python
# -*- coding:utf-8 -*- class indexer:
def __getitem__(self, item):
return item **2 x = indexer() for i in range(5):
print(x[i])

运行结果:

0
1
4
9
16

getitem__和__iter__实现迭代

初学者可能不见得马上就能领会这里的技巧,但这些技巧都是非常有用的。for语句的作用是从o到更大的索引值,重复对序列进行索引运算,直到检侧到超出边界的异常.因此,__getitem__也可以是Py,hon中一种重载迭代的方式。如果定义了这个方法,于。r循环每次循环时都会调用类的__geti大em--_,并持续搭配有更高的偏移值。这是一种“买一送一”的情况:任何会响应索引运算的内置或用户定义的对象,同样会响应迭代。

#!/usr/bin/env python
# -*- coding:utf-8 -*- class stepper:
def __getitem__(self, i):
return self.data[i] x = stepper()
x.data = "Spam" print(x[1]) for item in x:
print(item, end=" ")

运行结果:

p
S p a m

事实上,这其实是“买下送一”的情况。任何支持for循环的类也会自动支持Python所有迭代坏境,而其中多种迭代环境我们已看过,例如,成员关系测试in、列表解析、内置函数map、列表和元组赋值运算以及类型构造方法也会自动调用__getitem__(如果定义了的话)。

#!/usr/bin/env python
# -*- coding:utf-8 -*- class stepper:
def __getitem__(self, i):
return self.data[i] x = stepper()
x.data = "Spam" print(x[1]) for item in x:
print(item, end=" ") print()
print("---------------------------")
print("p" in x)
print([c for c in x])
print(list(map(lambda y : y,x))) print("---------------------------")
(a,b,c,d) = x
print(a,b,c,d) print(list(x), tuple(x), ''.join(x))
print(x)

运行结果:

p
S p a m
---------------------------
True
['S', 'p', 'a', 'm']
['S', 'p', 'a', 'm']
---------------------------
S p a m
['S', 'p', 'a', 'm'] ('S', 'p', 'a', 'm') Spam
<__main__.stepper object at 0x00000000022CC550>

python--getitem一拦截索引运算的更多相关文章

  1. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

  2. python小白之数组索引

    索引 numpy中的数组索引形式和Python是一致的.如: np.arange(10) print x[2]  #单个元素,从前往后正向索引.注意下标是从0开始的. print x[-2]  #从后 ...

  3. SQL Server调优系列基础篇(索引运算总结)

    前言 上几篇文章我们介绍了如何查看查询计划.常用运算符的介绍.并行运算的方式,有兴趣的可以点击查看. 本篇将分析在SQL Server中,如何利用先有索引项进行查询性能优化,通过了解这些索引项的应用方 ...

  4. SQL Server调优系列基础篇 - 索引运算总结

    前言 上几篇文章我们介绍了如何查看查询计划.常用运算符的介绍.并行运算的方式,有兴趣的可以点击查看. 本篇将分析在SQL Server中,如何利用先有索引项进行查询性能优化,通过了解这些索引项的应用方 ...

  5. python中 and 和 or 运算的核心思想 ——— 短路逻辑

    python中 and 和 or 运算的核心思想 --- 短路逻辑 1. 包含一个逻辑运算符 首先从基本的概念着手,python中哪些对象会被当成 False 呢?而哪些又是 True 呢? 在Pyt ...

  6. Python学习_02_数字和运算

    python具有强大的科学运算功能,python由于支持更加强大的面向对象和动态特性,相比R语言.matlab.mathmatic等传统的科学计算工具具有非常大的优势. Python的数字 pytho ...

  7. SQL Server 调优系列基础篇 - 索引运算总结

    前言 上几篇文章我们介绍了如何查看查询计划.常用运算符的介绍.并行运算的方式,有兴趣的可以点击查看. 本篇将分析在SQL Server中,如何利用先有索引项进行查询性能优化,通过了解这些索引项的应用方 ...

  8. python中实现三目运算

    python中没有其他语言中的三元表达式,不过有类似的实现方法 如: a = 1 b =2 k = 3 if a>b else 4 上面的代码就是python中实现三目运算的一个小demo, 如 ...

  9. python使用数组作为索引遍历数组

    python使用数组作为索引遍历数组 觉得有用的话,欢迎一起讨论相互学习~Follow Me python使用数组作为索引遍历数组 import numpy as np a=np.arange(0,5 ...

随机推荐

  1. bootstrap警告框、进度条和列表组

    警告框   <div class="container">      <div class="alert alert-success" rol ...

  2. list control 【转】

    1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标      LVS_SMALLICON: 为每个item显示小图标      LVS_LIST: 显示一列带有小图标的ite ...

  3. org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/home/index2", template might not exist or might not be accessible by any of the configured Template Resolvers

    org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/home/index2", ...

  4. uva12264 Risk

    最小值最大,就二分判断. map[i] = '0'+map[i];这样更方便 每个点拆成i,i’,  S连i,cap为a[i],i’连T,cap为1(保证至少剩一个)或mid. i,i’ ,a[i] ...

  5. OpenWrite方法打开现有文件并进行写入

    实现效果: 知识运用: File类的OpenWrite方法 //实现打开现有文件以进行写入 public static FileStream OpenWrite (string path) Encod ...

  6. Asp.Net Core 进阶(二) —— 集成Log4net

    Asp.Net Core 支持适用于各种内置日志记录API,同时也支持其他第三方日志记录.在我们新建项目后,在Program 文件入口调用了CreateDefaultBuilder,该操作默认将添加以 ...

  7. Gersgorin 圆盘

    将学习到什么 好多.   Gersgorin 圆盘定理   对任何 \(A \in M_n\),我们总可以记 \(A=D+B\),其中 \(D=\mathrm{diag}(a_{11},\cdots, ...

  8. 8 Java 归并排序(MergerSort)

    图片素材与文字描述来自:尚硅谷-韩顺平数据结构与算法. 1.基本思想 归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divi ...

  9. Js图片缩放代码 鼠标滚轮放大缩小 图片向右旋转

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. jpeg和jpg的区别是什么

    JPG是JPEG的简写,jpg是后缀名,jpeg既可作为后缀名,又能代表文件格式:JPG——JPEG文件格式. 我们在系统自带的画图程序里保存文件,在保存类型:JPEG(*.JPG,*.JPEG,*. ...