Python基础(四)

一、迭代器

      让不同数据类型具有相同的遍历方式:list、dict、str、tuple、set

1、特点:

①省内存

②只能向前,不能反复

③惰性机制

2、可迭代对象

###dir() 查看我们数据类型可以执行的操作###

print(dir(str))  # 如果有'__iter__'方法,说明就是可迭代对象
print(dir(list)) # '__iter__'

①查看set集合可执行的操作里有没有  __iter__ 方法

print("__iter__" in dir(set))
True

②列表变成一个迭代器

lst = ["张三", "李四", "王五", "赵六"]   #列表
it = lst.__iter__()     # iterator 迭代器
print(it)  #迭代器操作方法里有  '__iter__''__next__' 

③遍历迭代器

lst = ["张三", "李四", "王五", "赵六"]
it = lst.__iter__() # iterator 迭代器

for name in it:
    print(name)

④从迭代器取数据

###从迭代器获取到数据: __next__()###
print(it.__next__())          #一次取一个数据
print(it.__next__())
print(it.__next__())

数据取完时报错: StopIteration 停止迭代. 没有数据了

3、判断一个变量是否是迭代器,可迭代对象

from collections import Iterable, Iterator
lst = [1,2,3]
print(isinstance(lst, Iterable)) # 判断列表是否是可迭代的
print(isinstance(lst, Iterator)) # 判断列表是否是是迭代器
from collections import Iterable, Iterator
lst = ["张三", "李四", "王五", "赵六"]
it = lst.__iter__()
print(isinstance(it, Iterable)) # 判断列表是否是可迭代的
print(isinstance(it, Iterator)) # 判断列表是否是是迭代器

4、函数传参判断是否可迭代对象

from collections import Iterable,Iterator
def func(n):
    if isinstance(n, Iterable): # 判断是否是可迭代对象
        for item in n:
            print(item)
    else:
        print(n)

func("哈哈哈")

 二、生成器

    本质上就是一个迭代器,同样节省内存

1、生成器函数

def func():
      yield
###生成器函数  -> 执行的时候,不会立即把函数全部执行完,创建一个生成器返回
def func():
    print("哈哈哈")
    yield 1    #有yield 就是一个生成器函数. 会创建一个生成器对象给你
    print("吼吼吼")
    yield 2    #可以把一个函数分段执行
    print("我是最后执行……")
gen = func()   # generator  生成器
print("__iter__" and "__next__" in dir(gen))
需要执行__next__ 才会让生成器执行一次
def func():
    print("哈哈哈")
    yield 1 # 有yield 就是一个生成器函数. 会创建一个生成器对象给你
    print("吼吼吼")
    yield 2 # 可以把一个函数分段执行
    print("我是最后执行……")
gen = func()  # generator  生成器
ret = gen.__next__() # 执行到下一个yield
print(ret)

2、应用

def order():
    for i in range(10000):
        yield "衣服"+str(i)

gen = order() # 定义, 创建一个生成器对象

print( order().__next__()) #执行一次取一件衣服
print( order().__next__()) #执行一次取一件衣服

3、推导式

①列表推导式:[结果 for循环 if语句]

②字典推导式:{key:value for if}

③集合推导式:{key for if}


④生成器表达式:(结果 for if)

 

 三、装饰器

 

回到顶部

posted @ 2019-04-22 23:00  闫新江  阅读(184)  评论(0编辑  收藏  举报