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)
  • 相关阅读:
    字符匹配算法之KMP
    rabbitmq_hearbeat
    rabbitmq_config
    postgres SQL编译过程
    postgres启动过程分析
    postgres源码目录结构
    Js两种post方式(转)
    PHP-MySQL,PHP-MySQLi,PDO的差异
    CSS属性中Display与Visibility的不同
    PHP中include路径修改
  • 原文地址:https://www.cnblogs.com/JodyJoy1201/p/13669659.html
Copyright © 2011-2022 走看看