亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

生成器和面向編程

發布時間:2020-07-28 07:48:12 來源:網絡 閱讀:288 作者:期待美好 欄目:編程語言
            生成器
只要在函數體內出現yield關鍵字,那么再執行函數就不會執行函數代碼,會得到一個結果,該結果就是生成器。
生成器就是迭代器。
def foo():
    print('add')
    yield 1
    print('sidhi')
    yield 2
g=foo()
next(g)

res1=next(g)
print(res1)

yield的功能:
1.yield為我們提供了一種自定義迭代器對象的方法。
2.yield與retuen的區別,yield可以返回多次值,所以函數的暫停與繼續的轉態由yield幫我們保存的。

例:range的編寫 #range(1,10,2)
def bar(x,y,z):
    while x <= y:
        yield x              
        x+=z
g=bar(1,10,2)       
print(next(g))

案例:編寫tail -f error.log |grep 'abc'
import time 
def foo(file):
    with open(file,'rb') as f:
        f.seek(0,2)  #光標直接到末尾
        while Ture:
            line=f.readline()  #.readline()每次只讀一行
            if line:
                yield line
            else:
                time.sleep(0.03)    

def grep(line,pater):
for i in line:
    i=i.decode('utf-8')
    if pater in i:
        yield i

g=grep(foo('error.log'),'abc')
for i in g:
    print(i)

yiled表達式形式的用法:
def foo():
    print('%s is pig' %name)
    while Ture:
        bar=yield    #bar=yield='1111'
        print('%s is pig %s' %(name,bar))

g=foo('abc')
netx(g)  #初始化,也可以使用g.send(None)
然后g.send(),從代碼執行到暫停的位置再將值傳給yield ,與next一樣。
g.send('1111')
g.send('2222')

面向過程編程:  過程指的是解決問題的步驟,即先設計框架,基于該思路編寫程序,是一種機械式方式。
優點:復雜問題流程化,進而簡單化。
缺點:可擴展性差

案例:編寫grep -rl 'python' /etc
import os  
def init(funce):
    def titi(*args,**kawrgs):
        g=funce(*args,**kawrgs)
        next(g)
        return g
    return titi
@init #foo=titi

def foo(targrt):
    while Ture:
        path_a=yield
        g=os.wal(path_a)  #絕對路徑模塊
        for a,b,c in g:
            for c1 in c:
                abc_path=r'%s/%s ' %s(a,c)
                targrt.send(abc_path)
@init   
def opener(targrt):
    while Ture:
        abc_path=yield
        with open(abc_path,'rb') as f:
            targrt.send(abc_path,f)

@init 
def cat(targrt):
    while Ture:
        abc_path,f=yield
        for line in f:
            res=targrt.send((abc_path,line))
            if res:
                  break

@init
def grep(targrt,pate):
    pate=pate.encode('utf-8')
    res=False
    while Ture:
        abc_path,line=yield res
        res=False 
        if pate  in line:
            res=Ture
            targrt.send(abc_path)   

@init
def printer():
    while Ture:
        abc_path=yield
        print('%s' %abc_path)

g=foo(opener(cat(grep(printer(),'python'))))
g.send(r'/home')
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昔阳县| 沿河| 河津市| 江津市| 兴海县| 铁力市| 图们市| 咸丰县| 辉县市| 利川市| 阳西县| 南城县| 通州市| 本溪| 贡觉县| 嘉义市| 朝阳市| 南城县| 紫金县| 德安县| 贵定县| 锡林浩特市| 卢龙县| 长宁县| 巴林左旗| 安塞县| 固镇县| 中山市| 凤庆县| 清徐县| 光山县| 师宗县| 荔波县| 拉孜县| 龙陵县| 扎囊县| 凭祥市| 天祝| 盘山县| 右玉县| 桂林市|