Python学习

1、双下方法

  很少直接调用的方法。一般情况下,是通过其他语法触发的

  __name__  查看函数名的方法

  __doc__    查看函数注释的方法

def index():
    '''返回值'''
    a = 'asdfg'
    return a
index()
print(index.__name__)
print(index.__doc__)

  __add__()  相加

a = 1
b = 2
print(a.__add__(b))

  __iter__()  迭代器方法

  __next__()   迭代器一个一个的取值

  __length_hint__()  获取迭代器中元素的长度

  __setstate__()  根据索引值指定从哪里开始迭代

2、迭代器

  1)迭代:以将某个数据集内的数据“一个挨着一个的取出来”,就叫做迭代。

  2)可迭代:可以被for循环的数据集是可迭代的,所以字符串(str)、列表(list)、元组(tuple)、字典(dict)、集合(set)都是可迭代的。

  3)可迭代协议:满足内部可以实现__iter__()方法的要求。

  4)迭代器协议:满足拥有__iter__()和__next__()方法的要求

  5)关系:迭代器一定可迭代,可迭代的通过调用__iter__()方法就能得到一个迭代器

  6)迭代器特点:

    *  很方便使用,且所有的数据只能取一次

    *  节省内存空间

from collections import Iterable
from collections import Iterator
print(isinstance([],Iterator))      #   迭代器     False
print(isinstance([],Iterable))      #   可迭代的   True
#   构造数据类型
from collections import Iterable
from collections import Iterator
class A:
    def __iter__(self):pass
    def __next__(self):pass

a = A()
print(isinstance(a,Iterator))
print(isinstance(a,Iterable))

3、dir()方法

  返回某类数据集中所有的方法

4、生成器

  1)生成器的本质就是迭代器

  2)生成器的表现形式

    * 生成器函数

    * 生成器表达式

  3)生成器函数:

    * 含有yield关键字的函数就是生成器函数

    * 特点:

      1. 调用函数的之后函数不执行,返回一个生成器

      2. 每次调用__next__()方法的时候会取到一个值

      3. 直到取完最后一个,在执行next会报错

def generator():
    for i in range(20):
        yield '哇哈哈%s'%i

g = generator()  #调用生成器函数得到一个生成器
print(list(g))
ret = g.__next__()     #每一次执行g.__next__就是从生成器中取值,预示着生成器函数中的代码继续执行
print(ret)

    4)从生成器中取值的几个方法

      # __next__():一个一个的取值,取一个释放一个,不占用内存  
      # for:占用内存      
      # 数据类型的强制转换 : 占用内存

   

原文地址:https://www.cnblogs.com/SharkJiao/p/9392552.html