python基础-11-迭代器生成器、模块和包

1.迭代器和生成器

1.迭代器

#列表推导式:扩展操作,简化代码
>>> l3=[i for i in range(20) if i%2==1]  #第一个i,就是往列表里面添加的value
>>>l3=[i if i%2==1 else "a" for i in range(20)  ]  #偶数替换成“a”,奇数用i值

#集合推导式
>>> s={i for i in range(10)}
>>> s
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

#字典推导式
>>> s={i:"a" for i in range(5)}
>>> s
{0: 'a', 1: 'a', 2: 'a', 3: 'a', 4: 'a'}

#迭代器
    迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法。
    其中__iter__()方法返回迭代器对象本身;__next__()方法返回容器的下一个元素,在结尾时引发StopIteration异常。
'''
>>> l3=[i for i in range(20) if i%2==0]  #__iter__有这个魔法方法,具备可以迭代
>>> li=iter(l3)  
>>> next(li)
0

>>> l3=[i for i in range(20) if i%2==0]
>>> l3=l3.__iter__()
>>> next(l3)
0
>>> l3.__next__()
2

iter() 实现了  __iter__()
next() 实现了 __next__()
'''
#迭代器是用来干嘛
for:
1.iter() ->迭代器
2.next()->迭代取值

extend(iterable)->iter()->next()->append()

2.生成器generator
    在Python中,使用生成器可以很方便的支持迭代器协议。
    生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果,在每个结果之间挂起和继续它们的状态,来自动实现迭代协议。
    
    也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态。
    生成器函数返回生成器的迭代器。 “生成器的迭代器”这个术语通常被称作”生成器”。
    要注意的是生成器就是一类特殊的迭代器。作为一个迭代器,生成器必须要定义一些方法,
    其中一个就是__next__()。如同迭代器一样,我们可以使用__next__()函数来获取下一个值。
    
    在一个 generator function 中,如果没有 return,则默认执行至函数完毕,如果在执行过程中 return,
    则直接抛出 StopIteration 终止迭代。  
    #yield用来处理批量数据的,查看部分数据,防止内存爆了
'''
def  fun():
    i=0
    while i<5:
        print("***")
        yield i  #暂停使用,同时还可以返回值
        i+=1
        print("+++",i)

#运行结果:
>>> next(a)
***
0
>>> next(a)
+++ 1
***
1
'''

>>>next(fun())  #每次调用,都会生成一个对象

# 斐波那契数
def fib(num):
    n,a,b=0,0,1
    while n<num:
        print(b)
        if n%10==0:  
            yield #用来处理批量数据的,查看部分数据,防止内存爆了
        a,b=b,a+b
        n=n+1

2.模块和包

1.内置模块
    本身就带有的库,就叫做Python的内置的库。(模块==库)
    一些常见的内置模块
    os 和操作系统相关    os.path
    sys 和系统相关      sys.path  
        sys.path.append(r'')    可以添加路径
    re  正则表达式 
    
2.第三方模块
    非Python本身自带的库,就是所谓的第三方的库
        
3.模块的导入,模块的本质就是一个py文件
    import xxx  [as  yy]
    from ../xx  import  xx  [as  yy]  
'''
>>> import keyword  #会把模块里面所有的内容都导入
>>> from random import randint #指定导入,节省内存
>>> from random import* #会把模块里面所有的内容导入,但是不会导入 _cos,带下划线的私有属性
'''


4.自定义模块
    py文件,可以做为一个模块来用,直接作为一个模块导入就行
    __main__ 的意义:
        当文件是直接运行是,文件的__name__是__main__ ,当文件是被导入时,__name__是文件名
'''
#py 声明了name相当于声明主权
if __name__=="__main__": #我自己调用,才会执行
    print(__name__)
'''       
'''
#添加自定义引用的第三方库
>>> import os,sys
>>> sys.path
>>> sys.path.append(r"C:\Users\xxxx\Desktop\test")  #指定你的目录
>>> sys.path
>>> import test3  #C:\Users\xxxx\Desktop\test  引用目录下test3.py文件
test
'''


5.包管理
    基本上就是另外一类模块。把用来处理一类事物的多个文件放在同一文件夹下组成的模块集。
    要让python 将其作为包对待,在python2中必须包含__init__.py的文件,但在python3中没有__init__.py文件也可以,使用包可以避免多个文件重名的情况,不同的包下的文件同名不影响。
        
    导入包和模块是一样的方法,包导入后会在目录中自动生成__pycache__文件夹存放生成的.pyc文件,要注意的是import后面的才是存在当前作用域中的对象名,from是告诉python从什么地方导入,
    使用sys.path添加文件的目录路径。
'''
>>> import xml
>>> import xml.dom
#不是系统的包就添加路径
'''
import time
>>>time.localtime()
>>>time.asctime(time.localtime())
>>>time.time() #时间戳

3.扩展外传参数

#cmd中调用:  python3 C:\Users\xxx\Desktop\python\test.py  "test" "a"
import sys
def test():
    print("this is test")
    a="test"
    return a
test1="this is test"
if __name__=="__main__": #我自己调用,才会执行
    print(__name__)
    sys.argv
    print(sys.argv)
    print(sys.argv[1])
    print(sys.argv[2])
    test()

#运行结果:
__main__
['C:\\Users\\xxx\\Desktop\\python\\test.py', 'test', 'a']
test
a
this is test

    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容