• 函数高级部分


    装饰器

    迭代器与生成器

    一 可迭代的对象——>在Python但凡内置有__iter__方法的对象,都是可迭代对象。(字符串,列表,字典,元组,集合,文件)

    iterable:可迭代的------对应的标志

    二 迭代器:迭代取值的工具,可迭代的对象执行__iter__方法得到的返回值就是迭代器对象。

    迭代器对象:指的是既有内置__iter__方法,又内置有__next__方法的对象。

    执行迭代器对象的__next__得到的是迭代期的下一个值。

    执行迭代器对象的__iter__得到的任然是迭代器本身。

    什么是迭代?迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来。

    1 print(dir([1,2].__iter__()))#查看列表迭代器的所有方法
    2 print(dir([1,2]))#查看列表的所有方法
    3 print(set(dir([1,2].__iter__()))-set(dir([1,2])))
    iter_l=[1,2,3,4,5,6].__iter__()
    
    print(iter_l.__length_hint__())#获取迭代器中元素的长度
    # print(iter_l.__setstate__(4))#根据索引指定从哪里开始迭代
    
    print(iter_l.__next__())
    print(iter_l.__next__())
    print(iter_l.__next__())#一个一个的取值
    print(next(iter_l))
    #next(iter_l)这个方法和iter_l.__next__()方法一样,推荐用next(iter_l)这个
    l=[1,2,3,4,5]
    a=l.__iter__()
    
    # print(next(a))
    # print(next(a))
    # print(next(a))
    # print(next(a))
    # print(next(a))
    # print(next(a))   #上面的列表长度只有5个,而你多打印了,就会报错。处理的情况如下,就不会报错了
    
    while True:
        try:
            item=a.__next__()
            print(item)
        except StopIteration: # 异常处理
            break

    三 可迭代和迭代器的相同点:都可以用for循环

    四 可迭代和迭代器的不同点:就是迭代器内部多实现了一个__next__方法

    五 判断迭代器和可迭代的方法:

    第一种:判断内部是不是实现了__next__方法

           1 '__iter__' in dir(str)#如果__iter__在这个方法里面,就是可迭代的。 

      第二种:

        Iterable 判断是不是可迭代对象

        Iterator 判断是不是迭代器

        用法:

    from collections import Iterable  
    from collections import Iterator
    
    #比如给一个字符串
    s='abc'
    print(isinstance(s,Iterable))#isinstance判断类型的
    print(isinstance(s,Iterator))

    判断range函数和map函数

    map1=map(abs,[1,-2,3,-4])
    print(isinstance(map1,Iterable))
    print(isinstance(map1,Iterator))#map方法自带迭代器
    
    s=range(100)#是一个可迭代的,但是不是迭代器
    print(isinstance(s,Iterable))
    print(isinstance(s,Iterator))

    迭代器代码:

    # strx='zhangrenguo'
    # listx=['read','run','play']
    # dictx={'name':'zrg','age':18,'sex':'male'}
    #
    # iter_dictx = iter(dictx)
    # print(iter_dictx)
    
    # iter_dictx = dictx.__iter__()
    # print(iter_dictx)
    # while True:
    #     try:
    #         print(iter_dictx.__next__())
    #     except StopIteration:
    #         break
    # tuplex=(1,2,3,4,5)
    # x=open('a.txt','r',encoding='utf-8')
    
    
    # for循环:迭代器循环
    # in后跟的一定是可迭代对象
    
    # iter_listx=iter(listx)
    # print(next(iter_listx))
    
    # print(iter(strx))
    # print(next(x))
    
    # for i in x:
    #     print(i)
    #
    # for k in dictx:
    #     print(k,dictx[k])
    
    
    
    # iter_strx=strx.__iter__()
    # while True:
    #     try:
    #         print(iter_strx.__next__())
    #     except StopIteration:
    #         break
    
    
    
    # iter_listx=listx.__iter__()
    # while True:
    #     try:
    #         print(iter_listx.__next__())
    #     except StopIteration:
    #         break
    
    
    
    # iter_dictx=dictx.__iter__()
    # while True:
    #     try:
    #         print(iter_dictx.__next__())
    #     except StopIteration:
    #         break
    
    
    
    # iter_x=x.__iter__()
    # while 1:
    #     try:
    #         print(iter_x.__next__())
    #     except StopIteration:
    #         break
    
    
    
    
    
    # for i in 10:
    #     pass
    
    # list(10)
    
    
    
    # names=['a','b','c','d']
    # iter_names=iter(names)
    #
    # l1=list(iter_names)
    # print(l1)
    #
    # l2=list(iter_names)
    # print(l2)
    #
    
    
    
    # f=open('a.txt','rt',encoding='utf-8')
    # print(list(f))
    # print(list(f))
    # print(list(f))
    #
    
    
    
    # info = {'name':'zrg','age':24,'sex':'male'}
    # # info.__iter__()
    # iter_info = info.__iter__()
    # # iter_info.__next__()
    # print(iter_info.__next__())
    # print(iter_info.__next__())
    # print(iter_info.__next__())
    # # print(iter_info.__next__())
    
    
    
    # s1 = {'a','b','c','d',1,3,5,6,8,'zrg','egon'}
    # iter_s1 = s1.__iter__()
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
    # print(iter_s1.__next__())
  • 相关阅读:
    LaTeX —— 特殊符号与数学字体
    LaTeX —— 特殊符号与数学字体
    实战caffe多标签分类——汽车品牌与车辆外观(C++接口)[详细实现+数据集]
    家书与家训
    家书与家训
    Handler总结
    (step5.1.3)hdu 1213( How Many Tables——1213)
    JavaScript+XML+VBA导出报表初步构想
    XML学习总结
    JSP 9 大内置对象详解
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/10372800.html
Copyright © 2020-2023  润新知