zoukankan      html  css  js  c++  java
  • 【Python学习日记】B站小甲鱼:定制容器和迭代器

    协议  Python中的协议更像一种指南

    如果定制的容器是不变的,只需要定义len()和getitem()方法

    如果希望定制的容器是可变的,除了定义len()和getitem()而外,还需要定义setitem()和delitem()方法

    len()    返回容器中元素的个数

    getitem()  获得容器中指定元素, 类似self()

    setitem()  设置容器中指定元素, 类似set(key) = value

    delitem()  删除容器中指定元素, 类似del self(key)

    练习:要求自定义一个不可变的列表,返回其中元素的调用次数

    class Countlist:
        def __init__(self, *args):
            self.values = [x for x in args]
            self.count = {}.fromkeys(range(len(self.values)), 0)
    
        def __len__(self):
            return len(self.values)
    
        def __getitem__(self, key):
            self.count[key] += 1
            return self.values[key]
    
    
    c1 = Countlist(1, 3, 5, 7, 9)
    c2 = Countlist(2, 4, 6, 8, 10)
    print(c1[1])
    print(c2[1])
    print(c1[1]+c2[1])
    print(c1.count)

    输出结果是

    3
    4
    7
    {0: 0, 1: 2, 2: 0, 3: 0, 4: 0}


    迭代

    iter()  生成迭代器

    next()  迭代器返回下一个值

    比如

    it = iter('Hydra')
    print(next(it))
    while True:
        try:
            each = next(it)
        except StopIteration:
            break
        print(each)

    每一次next()就可以输出一个字符从H到a,结束以后再next()就会报错。这里的it相当于是一个迭代器

    相当于for语句

    string = 'Hydra'
    for each in string:
        print(each)
  • 相关阅读:
    httpRuntime 元素(ASP.NET 设置架构)
    Change GridView RowColor OnMouseClick
    创建自定义配置结
    设置自定义服务器控件的TagPrefix
    使用DataTable.ReadXml时抛出异常
    正则表达式的字符,定位字符和重复字符
    URL 编码
    tschs.xml 全文索引文件配置说明
    SQL2005 全文索引 contains
    SQL 语句执行时间
  • 原文地址:https://www.cnblogs.com/JodyJoy1201/p/13669659.html
Copyright © 2011-2022 走看看