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閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容