第九节课 迭代器生成器、模块和包

一、列表推导式

  10以内的偶数

li=[0,2,4,6,8,10]

li=list(range(0,11,2))

  也可以用循环

li=[]
for i in range(0,11,2):
    li.append(i)
   print(li)

  也可以用列表推导式

 
原式:
li=[]
for i in range(21):
   if i%2==0:
         li.append(i)
相当于:
li2=[i for i in range(21) if i%2==0] #第一个i相当于append后的那个元素

li3=['a' for i in range(21) if i%2==0] #如果你是偶数,就在列表里加一个'a'

li4=[i if i%2==0 else 'a' for i in range(21)] #若满足偶数则添加一个i,否则就添加一个'a'.要添加多个条件必须把for放后面
 

二、迭代器和生成器

  1、迭代器

    迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法。
    其中__iter__()方法返回迭代器对象本身;__next__()方法返回容器的下一个元素,在结尾时引发StopIteration异常。

 
li=[1,2,3] # 只有iter,没有next,就不是一个迭代器

li[1] #返回索引1的元素,2
 
li.__iter__() #将li返回为迭代器本身(将li变成一个迭代器),有个内饰函数iter作用一样

g=li.__iter__() #赋值

内置函数:next()
next(g)  #返回索引0的值,实现迭代器的作用,跟g.__nest__()作用一样
next(g)  #返回索引0的值
next(g)  #返回索引0的值
next(g)  #报错StopIteration

备注:必须将iter()后的值赋值给一个变量,否则会重新定义

循环:
g=iter(li)
for i in g:
    print(i,end=' ')
输出:1 2 3
 

  2、生成器  generator

 
def fun():
    i=1
    while i<5:
        print(i)
        yield 'stop'   #加了这边便将fun()变成一个迭代器,在调用next()是起到阻断器的作用(暂停),加了'stop'(类似于return对的作用,也会输出'stop')。总上言之,就是实现了生成器的功能:暂停,返回值
        i+=1
        print('aaa',i)

next() #输出 1
next() #输出  aaa 2
                    2
next() #输出:aaa 3
                    3

生成器本质上是个迭代器
 
 
斐波拉契数
1,1,2,3,5,8,13,21,34,。。。
用生成器来写斐波拉契数
def fib(num):
    n=0  #表示几代
    a,b=0,1
    while n<num:
        print(b) #b表示那一代的量
        if n%10==0:
            yield #加个生成器便可以一个一个看
        a,b=b,a+b
        n+=1 
 

三、模块和包

  模块:py文件

  包:很多py文件放在一个文件夹里

  方法:函数

  属性:变量名

  1、内置模块

  2、第三方模块

  3、模块的导入

import copy #导入整个模块

from copy import deepcopy #导大模块里面的小模块,节省内存,指定导入

    也可用cmd.exe的pip导入

  4、自定义模块

    相同路径:可直接导入文件名

    不同路径:借助一个其他的模块sys sys.path会从你的python安装路径找

import sys #调用sys函数
sys.path #搜索您python文件夹里所有py文件的路径
sys.path.append(r'绝对路径')  #将你的绝对路径导入
import 绝对路径里的模块 #然后就可以调用模块了    

    __main__ 的意义:
    当文件是直接运行是,文件的__name__是__main__ ,当文件是被导入时,__name__是文件名

  

原文地址:https://www.cnblogs.com/sysun110/p/11267588.html