zoukankan      html  css  js  c++  java
  • python--getitem一拦截索引运算

    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>
    
  • 相关阅读:
    Spring学习笔记(8)——依赖注入
    JS中Ajax的实现部分
    Hibernate4之注解零配置
    SQL中的DDL、DML、DCL、TCL
    冷启动与热启动
    双击退出
    显示或者隐式
    Android笔记01--手机振动
    github与pycharm
    正则re模块--入门
  • 原文地址:https://www.cnblogs.com/chenlin163/p/7304935.html
Copyright © 2011-2022 走看看