python標(biāo)準(zhǔn)庫(kù)赤兴、解析式、生成器

標(biāo)準(zhǔn)庫(kù)

datetime模塊

  • 對(duì)日期隧哮、時(shí)間桶良、時(shí)間戳的處理

  • datetime類

    • 類方法:

      • today():返回本地時(shí)區(qū)當(dāng)前時(shí)間的datetime對(duì)象

      • now(tz=None):返回當(dāng)前時(shí)間的datetime對(duì)象,時(shí)間到微秒沮翔,如果tz為None陨帆,返回和today()一樣

      • utcnow():沒有時(shí)區(qū)的當(dāng)前時(shí)間(國(guó)際化的時(shí)候建議用這個(gè))

      • fromtimestamp(timestamp , tz = None) 從一個(gè)時(shí)間戳返回一個(gè)datetime對(duì)象

    • datetime對(duì)象

      • timestamp():返回一個(gè)到微秒的時(shí)間戳
        • 時(shí)間戳:格林威治時(shí)間1970年1月1日0點(diǎn)到現(xiàn)在的秒數(shù)。
      • 構(gòu)造方法 datetime.datetime(2016, 12, 6, 16, 29, 43, 79043)
      • year采蚀、month疲牵、day、hour榆鼠、minute纲爸、second、microsecond妆够,取datetime對(duì)象的年月日時(shí)分秒及微秒
      • weekday() 返回星期的天识啦,周一0,周日6
      • isoweekday() 返回星期的天神妹,周一1颓哮,周日7
      • date() 返回日期date對(duì)象
      • time() 返回時(shí)間time對(duì)象
      • replace() 修改并返回新的時(shí)間
      • isocalendar() 返回一個(gè)三元組(年,周數(shù)鸵荠,周的天)
    • 日期格式化

      • 類方法 strptime(date_string, format) 题翻,返回datetime對(duì)象

      • 對(duì)象方法 strftime(format) ,返回字符串

      • 字符串format函數(shù)格式化

        import datetime
        dt = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
        print(dt.strftime("%Y-%m-%d %H:%M:%S"))
        print("{0:%Y}/{0:%m}/{0:%d} {0:%H}::{0:%M}::{0:%S}".format(dt))
        
  • timedelta對(duì)象

    • datetime2 = datetime1 + timedelta

    • datetime2 = datetime1 - timedelta

    • timedelta = datetime1 - datetime2

    • 構(gòu)造方法

      - datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, 
      minutes=0, hours=0, weeks=0) 
      - year = datetime.timedelta(days=365)
      
    • total_seconds() 返回時(shí)間差的總秒數(shù)

time模塊

  • time.sleep(secs) 將調(diào)用線程掛起指定的秒數(shù)(發(fā)起一個(gè)系統(tǒng)調(diào)用,讓程序暫停)

解析式

列表解析式

  1. 語法:
  • [返回值 for 元素 in 可迭代對(duì)象 if 條件]

  • 使用中括號(hào)[]嵌赠,內(nèi)部是for循環(huán)塑荒,if條件語句可選

  • 返回一個(gè)新的列表

  1. 列表解析式是一種語法糖:
  • 編譯器會(huì)優(yōu)化,不會(huì)因?yàn)楹?jiǎn)寫而影響效率姜挺,反而會(huì)因優(yōu)化而提高了效率齿税。
  • 減少了程序員工作量,減少出錯(cuò)炊豪。
  • 簡(jiǎn)化了代碼凌箕,但可讀性增強(qiáng),不便于可讀词渤。
  1. 舉例:
  • 獲取10以內(nèi)的偶數(shù)
#普通
even = []
for x in range(10):
  if x % 2 == 0:
    even.append(x)
 
#解析式
even = [x for x in range(10) if x%2 == 0]
  1. 思考:
  • 有這樣的賦值語句 newlist = [print(i) for i in range(10)]打印出來的是什么牵舱?
    print()把所有的i全打印出來,newlist里面則是10個(gè)None

  • 獲取20以內(nèi)的偶數(shù)缺虐,如果同時(shí)是3的倍數(shù)芜壁,把它打印出來

[i for i in range(20) if not i % 2 and i % 3 == 0]
[i for i in range(20) if not i % 2 if i % 3 == 0]
  • 獲取20以內(nèi)2的倍數(shù)或者3的倍數(shù),把它打印出來
    [i for i in range(20) if not i % 2 or i % 3 == 0]

  • "0001.abadicddws" 是ID格式高氮,要求ID格式是以點(diǎn)號(hào)分割慧妄,左邊是4位從1開始的整數(shù),右邊是
    10位隨機(jī)小寫英文字母剪芍。請(qǐng)依次生成前100個(gè)ID的列表

import string
import random
x= string.ascii_lowercase
["{:>04}.{}".format(i,"".join(random.choices(x,k = 10))) for i in range(1,8)]

['0001.rvverptnre',
 '0002.beqkpbxhfl',
 '0003.woxvvayzjo',
 '0004.wrbnnkelcc',
 '0005.kpsjowcfvz',
 '0006.pnqwqzlttc',
 '0007.wehobydqnf']

字典解析式

  1. 語法:
  • {返回值 for 元素 in 可迭代對(duì)象 if 條件}
  • 列表解析式的中括號(hào)換成大括號(hào){}就行了
  • 使用key:value形式
  • 立即返回一個(gè)字典
    用法:
{x:(x,x+1) for x in range(10)}
{x:[x,x+1] for x in range(10)}
{(x,):[x,x+1] for x in range(10)}
{[x]:[x,x+1] for x in range(10)} #[x]不可哈希塞淹,字典的k要求可哈希
{chr(0x41+x):x**2 for x in range(10)}
{str(x):y for x in range(3) for y in range(4)} # 輸出多少個(gè)元素?
#會(huì)覆蓋罪裹,返回{0:3饱普,1:3,2:3}

集合解析式

  1. 語法
  • {返回值 for 元素 in 可迭代對(duì)象 if 條件}
  • 列表解析式的中括號(hào)換成大括號(hào){}就行了
  • 立即返回一個(gè)集合
    用法
{(x,x+1) for x in range(10)}
{[x] for x in range(10)} #[x]是個(gè)集合状共,不能哈希套耕,所以放在集合解析式里面會(huì)報(bào)錯(cuò)

生成器

生成器Generator

生成器指的是生成器對(duì)象,可以由生成器表達(dá)式得到口芍,也可以使用yield關(guān)鍵字得到一個(gè)生成器函數(shù)箍铲,調(diào)用這個(gè)函數(shù)得到一個(gè)生成器對(duì)象雇卷。

生成器函數(shù):

  1. 函數(shù)體內(nèi)包含yield語句的函數(shù)鬓椭,返回一個(gè)生成器對(duì)象,生成器函數(shù)的函數(shù)體不會(huì)立即執(zhí)行关划。

    生成器對(duì)象小染,是一個(gè)可迭代對(duì)象,是一個(gè)迭代器贮折。

  2. 生成器對(duì)象裤翩,是延遲計(jì)算,惰性求值。

  3. next(generator)會(huì)從函數(shù)的當(dāng)前位置向后執(zhí)行到之后碰到的第一個(gè)yield語句踊赠,會(huì)彈出值呵扛,并暫停函數(shù)執(zhí)行。

  4. 再次執(zhí)行會(huì)執(zhí)行到下一個(gè)yield語句筐带,沒有多余的yield語句能執(zhí)行今穿,如果函數(shù)沒有顯式的return語句,繼續(xù)調(diào)用next函數(shù)就會(huì)拋出StopIteration異常伦籍。

  5. return會(huì)導(dǎo)致無法繼續(xù)獲取下一個(gè)值蓝晒,拋出StopIteration異常。

  6. 生成器函數(shù)帖鸦,它是函數(shù)芝薇,不過這個(gè)函數(shù)不像普通的函數(shù)調(diào)用時(shí)能返回一個(gè)合法的值,它返回的是一個(gè)還沒有求過任何值的生成器對(duì)象作儿,用next撥一下才會(huì)往后執(zhí)行一下洛二。

    #舉例
    def gen():
        print('line 1')
        yield 1
        print('line 2')
        yield 2
        print('line 3')
        return 3
    next(gen()) # line 1
    next(gen()) # line 1
    g = gen()
    print(next(g)) # line 1
    print(next(g)) # line 2
    print(next(g, 'End')) # 沒有元素給個(gè)缺省值
    print(next(g, 'End')) # 沒有元素給個(gè)缺省值
    

生成器的應(yīng)用

#計(jì)數(shù)器
def inc():
    def counter():
        i = 0
        while True:
            i += 1
            yield i
    c = counter()
    return lambda : next(c)

foo = inc()
print(foo())   #調(diào)用的時(shí)候是因?yàn)閕nc()函數(shù)返回的是一個(gè)匿名函數(shù),而匿名函數(shù)的調(diào)用方式是(lambda 參數(shù)列表:函數(shù)體)(),所以調(diào)用的時(shí)候是foo后要加上()立倍,即也就是inc()()灭红。


#等價(jià)于
def inc():
    def counter():
        i = 0
        while True:
            i += 1
            yield i
    c = counter()
    
    def _inc():  #用到外面的自由變量(c):閉包
        return next(c)
    return _inc
foo = inc()    #可調(diào)用對(duì)象,函數(shù)
print(foo())
yield from

yield from是python3.3出現(xiàn)的新語法

yield from iterable 是for item in iterable: yield item形式的語法糖口注。

for x in range(1000):
    yield x
    
#等價(jià)于

yield from range(1000)

從可迭代對(duì)象中一個(gè)個(gè)拿數(shù)據(jù)

def counter(n):   #生成器变擒,迭代器
    for x in range(n):
        yield x
        
def inc(n):
    yield from counter(n)
    
foo = inc(10)
print(next(foo))
print(next(foo))
協(xié)程coroutine

生成器的高級(jí)用法
比進(jìn)程、線程輕量級(jí)
是在用戶空間調(diào)度函數(shù)的一種實(shí)現(xiàn)
Python3 asyncio就是協(xié)程實(shí)現(xiàn)寝志,已經(jīng)加入到標(biāo)準(zhǔn)庫(kù)
Python3.5 使用async娇斑、await關(guān)鍵字直接原生支持協(xié)程
協(xié)程調(diào)度器實(shí)現(xiàn)思路

  • 有2個(gè)生成器A、B
  • next(A)后材部,A執(zhí)行到了yield語句暫停毫缆,然后去執(zhí)行next(B),B執(zhí)行到y(tǒng)ield語句也暫停乐导,然后再次調(diào)用next(A)苦丁,再調(diào)用next(B)在,周而復(fù)始物臂,就實(shí)現(xiàn)了調(diào)度的效果
  • 可以引入調(diào)度的策略來實(shí)現(xiàn)切換的方式

協(xié)程是一種非搶占式調(diào)度

生成器表達(dá)式Generator expression
  1. 語法
  • (返回值 for 元素 in 可迭代對(duì)象 if 條件)

  • 列表解析式的中括號(hào)換成小括號(hào)就行了

  • 返回一個(gè)生成器

  1. 和列表解析式的區(qū)別
  • 生成器表達(dá)式是按需計(jì)算(或稱惰性求值旺拉、延遲計(jì)算),需要的時(shí)候才計(jì)算值棵磷,返回迭代器蛾狗,可以迭代,從前到后走完一遍后仪媒,不能回頭沉桌。

  • 列表解析式是立即返回值,返回的不是迭代器,返回可迭代對(duì)象列表留凭, 從前到后走完一遍后佃扼,可以重新回頭迭代。

  1. 和列表解析式的對(duì)比
  • 計(jì)算方式
    • 生成器表達(dá)式延遲計(jì)算蔼夜,列表解析式立即計(jì)算
  • 內(nèi)存占用
    • 單從返回值本身來說松嘶,生成器表達(dá)式省內(nèi)存,列表解析式返回新的列表
    • 生成器沒有數(shù)據(jù)挎扰,內(nèi)存占用極少翠订,但是使用的時(shí)候,雖然一個(gè)個(gè)返回?cái)?shù)據(jù)遵倦,但是合起來占用的內(nèi)存也差不多
    • 列表解析式構(gòu)造新的列表需要占用內(nèi)存
  • 計(jì)算速度
    • 單看計(jì)算時(shí)間看尽超,生成器表達(dá)式耗時(shí)非常短,列表解析式耗時(shí)長(zhǎng)
    • 但是生成器本身并沒有返回任何值梧躺,只返回了一個(gè)生成器對(duì)象
    • 列表解析式構(gòu)造并返回了一個(gè)新的列表
  1. 生成器
  • 可迭代對(duì)象(able結(jié)尾)
  • 迭代器(or結(jié)尾)似谁,是不是迭代器用next()方法可以檢測(cè),iter()方法可以把一個(gè)可迭代對(duì)象封裝成迭代器掠哥。
  • 生成器和迭代器是不同的對(duì)象巩踏,但都是可迭代對(duì)象,生成器對(duì)象续搀,就是迭代器對(duì)象塞琼,迭代器不一定是生成器。

內(nèi)建函數(shù)

  1. 標(biāo)識(shí) id
  • 返回對(duì)象的唯一標(biāo)識(shí)禁舷,CPython返回內(nèi)存地址
  1. 哈希 hash()
  • 返回一個(gè)對(duì)象的哈希值
  1. 類型 type()
  • 返回對(duì)象的類型
  1. 類型轉(zhuǎn)換
  • float() int() bin() hex() oct() bool() list() tuple() dict() set() complex() bytes() bytearray()
  1. 輸入 input([prompt])
  • 接收用戶輸入彪杉,返回一個(gè)字符串
  1. 打印 print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • 打印輸出,默認(rèn)使用空格分割牵咙、換行結(jié)尾派近,輸出到控制臺(tái)
  1. 對(duì)象長(zhǎng)度 len(s)
  • 返回一個(gè)集合類型的元素個(gè)數(shù)
  1. isinstance(obj, class_or_tuple)
  • 判斷對(duì)象obj是否屬于某種類型或者元組中列出的某個(gè)類型
  • isinstance(True, int)
  1. issubclass(cls, class_or_tuple)
  • 判斷類型cls是否是某種類型的子類或元組中列出的某個(gè)類型的子類
  • issubclass(bool, int)
  1. 絕對(duì)值abs(x) x為數(shù)值

  2. 最大值max() 最小值min()

  • 返回可迭代對(duì)象中最大或最小值
  • 返回多個(gè)參數(shù)中最大或最小值
  1. round(x) 四舍六入五取偶,round(-0.5)

  2. pow(x , y) 等價(jià)于 x**y

  3. range(stop) 從0開始到stop-1的可迭代對(duì)象洁桌;range(start, stop[, step])從start開始到stop-1結(jié)束步長(zhǎng)為step的可迭代對(duì)象

  4. divmod(x, y) 等價(jià)于 tuple (x//y, x%y)

  5. sum(iterable[, start]) 對(duì)可迭代對(duì)象的所有數(shù)值元素求和渴丸,start:初始值

  • sum(range(1,100,2))
  1. chr(i) 給一個(gè)一定范圍的整數(shù)返回對(duì)應(yīng)的字符
  • chr(97) chr(20013)
  1. ord(c) 返回字符對(duì)應(yīng)的整數(shù)
  • ord('a') ord('中')
  1. sorted
    sorted(iterable[, key][, reverse] )排序
  • 返回一個(gè)新的列表,默認(rèn)升序
  • reverse是反轉(zhuǎn)
sorted([1, 3, 5])
sorted([1, 3, 5], reverse=True)
sorted({'c':1, 'b':2, 'a':1})
  1. 翻轉(zhuǎn) reversed(seq)
    返回一個(gè)翻轉(zhuǎn)元素的迭代器(惰性求值)
list(reversed("13579"))
{ reversed((2, 4)) } # 有幾個(gè)元素另凌?
for x in reversed(['c','b','a']):
    print(x)
reversed(sorted({1, 5, 9}))
  1. 枚舉 enumerate(seq, start=0)

迭代一個(gè)序列谱轨,返回索引數(shù)字和元素構(gòu)成的二元組
start表示索引開始的數(shù)字,默認(rèn)是0

for x in enumerate([2,4,6,8]):
    print(x)
for x in enumerate("abcde"):
    print(x,end=" ")
  1. 迭代器和取元素 iter(iterable)途茫、next(iterator[, default])

iter將一個(gè)可迭代對(duì)象封裝成一個(gè)迭代器
next對(duì)一個(gè)迭代器取下一個(gè)元素碟嘴。如果全部元素都取過了溪食,再次next會(huì)拋StopIteration異常

    it = iter(range(5))
    next(it)
    
    it = reversed([1,3,5])
    next(it)
  1. 拉鏈函數(shù)zip(*iterables)
    像拉鏈一樣囊卜,把多個(gè)可迭代對(duì)象合并在一起,返回一個(gè)迭代器
    將每次從不同對(duì)象中取到的元素合并成一個(gè)元組
list(zip(range(10),range(10)))
list(zip(range(10),range(10),range(5),range(10)))

dict(zip(range(10),range(10)))
{str(x):y for x,y in zip(range(10),range(10))}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市栅组,隨后出現(xiàn)的幾起案子雀瓢,更是在濱河造成了極大的恐慌,老刑警劉巖玉掸,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刃麸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡司浪,警方通過查閱死者的電腦和手機(jī)泊业,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啊易,“玉大人吁伺,你說我怎么就攤上這事∽馓福” “怎么了篮奄?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)割去。 經(jīng)常有香客問我窟却,道長(zhǎng),這世上最難降的妖魔是什么呻逆? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任夸赫,我火速辦了婚禮,結(jié)果婚禮上咖城,老公的妹妹穿的比我還像新娘憔足。我一直安慰自己,他們只是感情好酒繁,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布滓彰。 她就那樣靜靜地躺著,像睡著了一般州袒。 火紅的嫁衣襯著肌膚如雪揭绑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天郎哭,我揣著相機(jī)與錄音他匪,去河邊找鬼。 笑死夸研,一個(gè)胖子當(dāng)著我的面吹牛邦蜜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亥至,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼悼沈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贱迟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起絮供,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤衣吠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后壤靶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缚俏,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年贮乳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忧换。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡向拆,死狀恐怖包雀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亲铡,我是刑警寧澤才写,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站奖蔓,受9級(jí)特大地震影響赞草,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吆鹤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一厨疙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疑务,春花似錦沾凄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至温鸽,卻和暖如春保屯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涤垫。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工姑尺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝠猬。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓切蟋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親榆芦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柄粹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理喘鸟,服務(wù)發(fā)現(xiàn),斷路器镰惦,智...
    卡卡羅2017閱讀 134,702評(píng)論 18 139
  • 〇、前言 本文共108張圖犬绒,流量黨請(qǐng)慎重旺入! 歷時(shí)1個(gè)半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識(shí)的框架詳細(xì)梳理了一遍凯力。 ...
    Raxxie閱讀 18,966評(píng)論 17 410
  • Python特性 切片:取一個(gè)list或tuple的部分元素如取L = ['張三'茵瘾,'李四', '王五', '趙...
    hellokazhang閱讀 190評(píng)論 0 1
  • 藥劑粉體學(xué)粉體學(xué)章的名詞解釋 powder:粉體是無數(shù)個(gè)固體微粒的集合體 micromeritics:粉體學(xué)是研究...
    c28369096728閱讀 821評(píng)論 0 0
  • 恭喜自己堅(jiān)持5點(diǎn)半起床ALL IN 區(qū)塊鏈 滿一個(gè)月,而且今天還是本人的生日咐鹤,真是可喜可賀啊?? 這一個(gè)月真是迎著早...
    duanyu閱讀 920評(píng)論 5 4