zoukankan      html  css  js  c++  java
  • 04.2 实现可切片的对象

    代码

    # 切片[start:end:step]
    """
    start: 切片开始位置,默认为0
    end: 切片截至位置(不包含该位置),默认列表长度 len(列表)
    step: 切片的步长,默认为1
    当step为负整数,表示反向切片,这时start应该比end的值大
    切片会返回一个新的列表
    """
    alist = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
    print(alist[::])   # 返回包含原列表中所有元素的新列表       # [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
    print(alist[::-1])  # 返回包含原列表中所有元素的 倒序 列表    #  [17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
    print(alist[::2])   # 隔step-1 取一个, 获取偶数位置的值     # [3, 5, 7, 11, 15]
    print(alist[1::2])  # 从下标1开始(包含)截取 隔step -1 取一个, 获取奇数位置列表   # [4, 6, 9, 13, 17]
    
    print(alist[3:6])   # 从下标3开始(包含)截取数据,至下标6(不包含)结束    # [6,7,9]
    
    print(alist[0:110])     # 结束位置大于列表长度,从列表尾部截断 [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
    print(alist[100:0])     # 起始位置大于列表长度,返回空列表[]
    
    
    # 实现可切片对象
    class Group:
        def __init__(self, group_name, company_name, staffs):
            self.group_name = group_name
            self.company_name = company_name
            self.staffs = staffs
    
        def __reversed__(self):
            self.staffs.reverse()
            return self.staffs
    
        def __getitem__(self, item):
            """实现切片对象的关键"""
            cls = type(self)
            # 判断是切片类型,当传入[start:end:step] 语法将自动初始化slice 类
            if isinstance(item, slice):
                return cls(self.group_name, self.company_name, self.staffs[item])
            elif isinstance(item, int):
                return cls(self.group_name, self.company_name, [self.staffs[item]])
    
        def __len__(self):
            return len(self.staffs)
    
        def __iter__(self):
            return iter(self.staffs)
    
        def __contains__(self, item):
                return True if item in self.staffs else False
    
    
    group = Group("imooc", "user", ["1","2","3"])
    print(group[0:2])   # 调用 __getitem__
    print(group[1])
    
    
    print("1" in group)     # 调用的是 __contains__方法
    
    print(reversed(group))   # 调用的是 __reversed__
    
    for i in group:     # 调用 __iter__
        print(i)
    
    print(len(group) )     # 调用 __len__
    
  • 相关阅读:
    从零开始学 Web 之 DOM(七)事件冒泡
    从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
    从零开始学 Web 之 DOM(五)元素的创建
    从零开始学 Web 之 DOM(四)节点
    从零开始学 Web 之 DOM(三)innerText与innerHTML、自定义属性
    从零开始学 Web 之 DOM(二)对样式的操作,获取元素的方式
    从零开始学 Web 之 DOM(一)DOM的概念,对标签操作
    @RequestParam和@GetMapping
    组件(一)
    Vue(一)
  • 原文地址:https://www.cnblogs.com/zy7y/p/14193783.html
Copyright © 2011-2022 走看看