zoukankan      html  css  js  c++  java
  • 函数高级部分

    装饰器

    迭代器与生成器

    一 可迭代的对象——>在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__())
  • 相关阅读:
    UVA
    UVA
    模板——扩展欧几里得算法(求ax+by=gcd的解)
    UVA
    模板——2.2 素数筛选和合数分解
    模板——素数筛选
    Educational Codeforces Round 46 (Rated for Div. 2)
    Educational Codeforces Round 46 (Rated for Div. 2) E. We Need More Bosses
    Educational Codeforces Round 46 (Rated for Div. 2) D. Yet Another Problem On a Subsequence
    Educational Codeforces Round 46 (Rated for Div. 2) C. Covered Points Count
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/10372800.html
Copyright © 2011-2022 走看看