python getitem用法_Python:在__getitem__中实现切片
如何定义getitem类以处理纯索引和切片?
切片对象当您使用的下标符号冒号被自动创建的-而这正是传递给__getitem__。使用isinstance来检查,如果你有一个切片对象:
from __future__ import print_function
class Sliceable(object):
def __getitem__(self, subscript):
if isinstance(subscript, slice):
# do your handling for a slice object:
print(subscript.start, subscript.stop, subscript.step)
else:
# Do your handling for a plain index
print(subscript)
假设我们使用的是范围对象,但我们希望切片返回列表,而不是新的范围对象(确实如此):
>>> range(1,100, 4)[::-1]
range(97, -3, -4)
由于内部限制,我们不能对范围进行子类化,但是我们可以委托给它:
class Range:
"""like builtin range, but when sliced gives a list"""
__slots__ = "_range"
def __init__(self, *args):
self._range = range(*args) # takes no keyword arguments.
def __getattr__(self, name):
return getattr(self._range, name)
def __getitem__(self, subscript):
result = self._range.__getitem__(subscript)
if isinstance(subscript, slice):
return list(result)
else:
return result
r = Range(100)
我们没有完美可替换的Range对象,但它非常接近:
>>> r[1:3]
[1, 2]
>>> r[1]
1
>>> 2 in r
True
>>> r.count(3)
1
为了更好地理解切片符号,这是Sliceable的示例用法:
>>> sliceme = Sliceable()
>>> sliceme[1]
1
>>> sliceme[2]
2
>>> sliceme[:]
None None None
>>> sliceme[1:]
1 None None
>>> sliceme[1:2]
1 2 None
>>> sliceme[1:2:3]
1 2 3
>>> sliceme[:2:3]
None 2 3
>>> sliceme[::3]
None None 3
>>> sliceme[::]
None None None
>>> sliceme[:]
None None None
Python 2,请注意:
在Python 2中,有一个不赞成使用的方法,在子类化某些内置类型时可能需要重写该方法。
从数据模型文档中:
object.__getslice__(self, i, j)
从2.0版开始不推荐使用:支持将切片对象用作__getitem__()方法的参数。(但是,CPython中的内置类型当前仍在实现__getslice__()。因此,在实现切片时必须在派生类中重写它。)
这在Python 3中已经消失了。
python getitem用法_Python:在__getitem__中实现切片相关推荐
- python end用法_python中end的使用方法
python中end的使用方法 发布时间:2020-06-17 09:47:13 来源:亿速云 阅读:178 这篇文章给大家分享的是有关python中end的使用方法,小编觉得挺实用的,因此分享给大家 ...
- python try用法_python中的try的用法
展开全部 try语句32313133353236313431303231363533e78988e69d8331333431366238是python里面的控制语句,与except,finally配合 ...
- python return用法_Python 为什么没有 void 关键字?
void 是编程语言中最常见的关键字之一,从字面上理解,它是"空的.空集.空白"的意思,最常用于表示函数的一种返回值类型. 维基百科上有一个定义: The void type, i ...
- python字符串添加元素_python向字符串中添加元素的实例方法
Python中的字符串对象是不能更改的,也即直接修改字符串中的某一位或几位字符是实现不了的,即python中字符串对象不可更改,但字符串对象的引用可更改,可重新指向新的字符串对象. + 直接字符串外+ ...
- python基本用法_Python基本用法总结
Python 的设计具有很强的可读性,易于使用.这里对python基本用法做一个总结介绍. 一. 变量类型 1. 变量赋值 Python中的变量赋值不需要类型声明,每个变量在使用前都必须赋值,变量赋值 ...
- python字符串转义序列_Python | 忽略字符串中的转义序列
python字符串转义序列 First see, how escape sequence works? 首先看,转义序列如何工作? In the below example, we are using ...
- python yield用法_Python中迭代器和生成器的区别?
公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...
- python的继承用法_python之继承中组合用法与菱形继承关系查找法
1.什么是组合 组合就是一个类的对象具备某一属性,该属性的值是指向另外外一个类的对象 2.为什么用组合 组合也是用来解决类与类之间代码冗余问题 3.用法 class Course: ...
- python中tile的用法_Python:numpy中的tile函数
在学习机器学习实教程时,实现KNN算法的代码中用到了numpy的tile函数,因此对该函数进行了一番学习: tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复 ...
最新文章
- python网络爬虫的基本步骤-Python网络爬虫学习手记(1)——爬虫基础
- php 开发商城 注意,php开发微商城要注意什么
- Raising Modulo Numbers
- amd cpu 不兼容centos5.5_AMD放弃兼容性?这事简单也不简单
- 注解_JDK内置注解
- IE的documentMode属性
- html只读下拉框,Html.DropDownList – 禁用/只读
- 《三层架构之抽象工厂加反射》纠错
- VC下绘图程序Demo
- 1.7.05:输出亲朋字符串
- ArcPad8新功能介绍
- Html中跳转到其他页面
- 计算机断网后怎么连接网络连接,电脑突然断网, 连接不上网络怎么办? 三种方法轻松找回...
- 数据结构单链表:指定结点的前插、后插操作
- 神州优车上云之路:如何在效率、质量和成本三方面达到平衡?
- ctf流量分析练习二
- 《人性的弱点》25句经典语录
- 三个常见博弈游戏以及 SG 函数和 SG 定理
- The request was rejected because the URL contained a potentially malicious String “%2e“
- 基于LRU-K算法设计本地缓存实现流量削峰
热门文章
- 看别人关于设计模式的文章很深刻,不是很明白
- 2021重庆市高考成绩排名查询,2021年重庆各高中高考成绩排名及放榜最新消息
- 华为harmonyos 2.0,连接无限可能,华为HarmonyOS 2.0 正式发布
- 内网渗透-Metasploit之——基本后渗透命令
- java反射field_java反射field用法
- Redis内存不足解决方案
- 安装 KeyShot 流程
- Mac中安装homebrew全过程(附常用问题解决办法)
- # 工欲善其事必先利其器-C语言拓展--嵌入式C语言(三)
- 【特征提取】心电信号PTT+HRV+PRV含Matlab源码