久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

13lambda_yield_yieldfrom_coroutine-創新互聯

目錄

成都創新互聯是一家專業的成都網站建設公司,我們專注成都做網站、成都網站建設、網絡營銷、企業網站建設,賣友情鏈接廣告投放平臺為企業客戶提供一站式建站解決方案,能帶給客戶新的互聯網理念。從網站結構的規劃UI設計到用戶體驗提高,創新互聯力求做到盡善盡美。

匿名函數...1

生成器generator:...2

生成器函數:...2

生成器應用:...5

coroutine協程:...6

匿名函數

匿名,即沒有名字,沒有名字的函數;

python借助lambda表達式構建匿名函數;

格式:

lambda 參數列表: 表達式

參數列表不需要小括號;

冒號是用來分割參數列表和表達式的;

不需要使用return,表達式的值就是匿名函數的返回值;

lambda表達式只能寫在一行上,被稱為單行函數;

用途,高階函數傳參時,使用lambda表達式,往往能簡化代碼;

例:

In [2]: lambda x: x**2

Out[2]: <function __main__.<lambda>>

In [3]: (lambda x: x**2)(4)?? #調用

Out[3]: 16

In [4]: foo=lambda x,y:(x+y)**2?? #不推薦這么用

In [5]: foo(2,1)

Out[5]: 9

In [6]: def foo(x,y):?? #如果復雜時,建議使用普通函數

...:???? return (x+y)**2

...: foo(2,1)

...:

Out[6]: 9

In [7]: lst=['a',2,1]

In [8]: lst.sort(key=str)?? #高階函數,str為函數

In [9]: lst

Out[9]: [1, 2, 'a']

In [10]: lambda :0?? #無參函數,返回常數0

Out[10]: <function __main__.<lambda>>

In [11]: (lambda x,y=3:x+y)(5)

Out[11]: 8

In [12]: (lambda x,y=3: x+y)(5,6)

Out[12]: 11

In [13]: (lambda x,*,y=30: x+y)(5)

Out[13]: 35

In [14]: (lambda x,*,y=30: x+y)(5,y=10)

Out[14]: 15

In [15]: (lambda *args:(x for x in args))(*range(5))?? #生成器,惰性求值

Out[15]: <generator object <lambda>.<locals>.<genexpr> at 0x7f892ccaca40>

In [16]: (lambda *args: [x for x in args])(*range(5))?? #列表解析,立即求值

Out[16]: [0, 1, 2, 3, 4]

In [18]: (lambda *args: {x+2 for x in args})(*range(5))

Out[18]: {2, 3, 4, 5, 6}

In [20]: [x for x in (lambda *args: map(lambda x: x+1,args))(*range(5))]?? #高階函數

Out[20]: [1, 2, 3, 4, 5]

In [22]: [x for x in (lambda *args: map(lambda x: (x+1,args),args))(*range(5))]

Out[22]:

[(1, (0, 1, 2, 3, 4)),

(2, (0, 1, 2, 3, 4)),

(3, (0, 1, 2, 3, 4)),

(4, (0, 1, 2, 3, 4)),

(5, (0, 1, 2, 3, 4))]

生成器generator:

生成器指的是生成器對象,可以由生成器表達式得到,也可以使用yield關鍵字得到一個生成器函數,調用這個函數得到一個生成器對象;

庫函數中有大量使用;

生成器表達式和生成器函數能夠生成生成器對象;

生成器函數:

函數中包含yield語句的函數,返回生成器對象;

生成器對象,是一個可迭代對象,是一個迭代器;

生成器對象,是延遲計算,惰性求值的;

普通的函數在調用后,會立即執行完畢,但生成器函數可使用next()多次執行;

生成器函數等價于生成器表達式,只不過生成器函數更加復雜;

生成器函數,核心:讓出;

在生成器函數中,使用多個yield語句,執行一次后會暫停執行,把yield表達式的值返回;

再次執行會執行到下個yield語句;

return語句依然可以終止函數運行,但return語句的返回值不能被獲取到,生成器函數中一般不加return語句;

return會導致無法繼續獲取下一個值,拋StopIteration異常;

如果函數沒有顯式的return語句,如果生成器函數執行到結尾一樣會拋StopIteration異常;

包含yield語句的生成器函數,生成生成器對象時,生成器函數的函數體不會立即執行;

next(generator)會從函數的當前位置向后執行到之后碰到的第一個yield語句,會彈出值,并暫停函數執行,next()可理解為撥一下轉一次;

再次調用next(),和上一條一樣的處理過程,當沒有元素時可給缺省值next(g,'End'),防止拋異常;

沒有多余的yield語句能被執行,繼續調用next(),會拋StopIteration異常;

例:

In [23]: def inc():

...:???? for i in range(5):

...:???????? yield i?? #出現yield就是生成器函數

...:????????

In [24]: type(inc)

Out[24]: function

In [25]: type(inc())

Out[25]: generator

In [26]: x=inc()

In [27]: type(x)

Out[27]: generator

In [28]: next(x)

Out[28]: 0

In [29]: for n in x:

...:???? print(n)

...:????

1

2

3

4

In [30]: for n in x:

...:???? print(n)?? #x在上個for中已迭代完

...:????

...:????

In [39]: y=(i for i in range(2))

In [40]: type(y)

Out[40]: generator

In [41]: next(y)

Out[41]: 0

In [42]: next(y)

Out[42]: 1

In [43]: next(y)

---------------------------------------------------------------------------

StopIteration???????????????????????????? Traceback (most recent call last)

<ipython-input-43-81b9d2f0f16a> in <module>()

----> 1 next(y)

StopIteration:

例:

In [44]: def gen():

...:???? print('line1')

...:???? yield 1

...:???? print('line2')

...:???? yield 2

...:???? print('line3')

...:???? return 3

...:

In [45]: next(gen())

line1

Out[45]: 1

In [46]: next(gen())

line1

Out[46]: 1

In [47]: g=gen()

In [48]: next(g)

line1

Out[48]: 1

In [49]: next(g)

line2

Out[49]: 2

In [50]: next(g)

line3

---------------------------------------------------------------------------

StopIteration???????????????????????????? Traceback (most recent call last)

<ipython-input-50-e734f8aca5ac> in <module>()

----> 1 next(g)

StopIteration: 3

In [51]: g=gen()

In [52]: next(g)

line1

Out[52]: 1

In [53]: next(g)

line2

Out[53]: 2

In [54]: next(g,'End')??#沒有元素,給缺省值

line3

Out[54]: 'End'

In [55]: next(g,'End')

Out[55]: 'End'

無限循環:

例:

defcounter():
??? i =0
???while True:
??????? i +=1
???????yieldi

definc(c):
???????returnnext(c)

c = counter()
print(inc(c))
print(inc(c))
print(inc(c))

##############

defcounter2():
??? i =0
???while True:
??????? i +=1
???????yieldi

definc2():
??? c = counter()
???returnnext(c)

print(inc2())?? #1
print(inc2())?? #1
print(inc2())?? #1,每次都創建生成器對象

生成器應用:

計數器:

definc():
???defcounter():
??????? i =0
???????while True:
??????????? i +=1
???????????yieldi
??? c = counter()
???return lambda:next(c)??#相當于如下三行,閉包,用到了外層函數的自由變量c,lambda表達式是匿名函數,return返回的是一個匿名函數
??? #def _inc():
??????? #return next(c)
??? #return _inc
foo = inc()
print(foo())
print(foo())

處理遞歸問題:

deffib():
??? x =0
???y =1
???while True:
???????yieldy
??????? x,y = y,x+y

foo=fib()
foriinrange(5):
???print(next(foo))

for_inrange(100):
???print(next(foo))
#print(next(foo))

coroutine協程:

生成器的高級用法;

比進程、線程輕量級;

是在用戶空間調度函數的一種實現;

python3 asyncio就是協程實現,已加入到標準庫;

python3.5使用async、await關鍵字直接原生支持協程;

協程調度器實現思路,有2個生成器A、B,next(A)后,A執行到了yield語句暫停,然后去執行next(B),B執行到yield語句也暫停,然后再次調用next(A),再調用next(B),周而復始,就實現了調度效果;可引入調度的策略來實現切換的方式;

協程是一種非搶占式調度;

yield from語句:

python3.3出現的新語法;

yield from iterrable是for item in iterable: yield item形式的語法糖,從可迭代對象中一個個拿元素;

例:

In [56]: def inc():

...:???? for x in range(1000):

...:???????? yield x

...:????????

In [57]: def inc():

...:??? ?yield from range(1000)

...:????

In [58]: foo=inc()

In [59]: next(foo)

Out[59]: 0

In [60]: next(foo)

Out[60]: 1

例:

In [68]: def counter(n):

...:???? yield from range(n)

...:????

In [69]: def inc(n):

...:???? yield from counter(n)

...:????

In [70]: foo=inc(10)

In [71]: next(foo)

Out[71]: 0

In [72]: next(foo)

Out[72]: 1

習題:

1、把一個字典扁平化flat;

源字典:{'a':{'b':1,'c':2},'d':{'e':3,'f':{'g':4}}}

2、實現base64編碼,要求自己實現算法;

3個8bit字節3*8-->轉化為4個6bit字節4*6,之后在6bit的前面補兩0,形成8bit一個字節的形式,如果剩下的字符不是3個字節,則用0填充,輸出字符使用=,因此編碼后輸出的文本末尾可能會出現1個或2個=;

編碼大小為2**6=64;

每一段當作一個8bit看它的值,這個值就是base64編碼表的索引值,找到對應字符,再取3個字節,同樣處理,直到最后;

例:

abc對應的ascii為:0x61,0x62,0x63,十進制為97,98,99

01100001 01100010 01100011

011000 010110 001001 100011

00011000 00010110 00001001 00100011

24 22 9 35

末尾處理:

正好3個字節,處理方法同上;

剩1個字節或2個字節,用0補滿3個字節;

補0的字節用=表示;

大小端模式:

大端模式(Big-endian),是指數據的高字節,保存在內存的低地址中,而數據的低字節,保存在內存的高地址中,這樣的存儲模式有點兒類似于把數據當作字符串順序處理:地址由小向大增加,而數據從高位往低位放;

小端模式(Little-endian),是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低,和我們的邏輯方法一致;

在C語言中,默認是小端(但在一些對于單片機的實現中卻是基于大端,比如Keil 51C),Java是平臺無關的,默認是大端;在網絡上傳輸數據普遍采用的都是大端;

In [48]: b=int.from_bytes('abc'.encode(),'big')

In [49]: b

Out[49]: 6382179

In [50]: hex(b)

Out[50]: '0x616263'

In [52]: b=int.from_bytes('abc'.encode(),'little')

In [53]: hex(b)

Out[53]: '0x636261'

In [54]: type(b)

Out[54]: int

In [55]: import base64

In [56]: base64.b64encode('abc'.encode())

Out[56]: b'YWJj'

i18n(其來源是英文單詞internationalization的首末字符i和n,18為中間的字符數)是“國際化”的簡稱。在資訊領域,國際化(i18n)指讓產品(出版物,軟件,硬件等)無需做大的改變就能夠適應不同的語言和地區的需要。對程序來說,在不修改內部代碼的情況下,能根據不同語言及地區顯示相應的界面。在全球化的時代,國際化尤為重要,因為產品的潛在用戶可能來自世界的各個角落。通常與i18n相關的還有L10n(“本地化”的簡稱)。

3、求2個字符串的最長公共子串;

1、

src = {'a':{'b':1,'c':2},'d':{'e':3,'f':{'g':4}}}

target = {}

def flatmap(src,prefix=''):

for k,v in src.items():

if isinstance(v,(dict)):

flatmap(v,prefix=prefix+k+'.')

else:

target[prefix+k] = v

flatmap(src)

print(target)

#####################

src = {'a':{'b':1,'c':2},'d':{'e':3,'f':{'g':4}}}

def flatmap(src,dst=None,prefix=''):

if dst == None:??

???dst = {}

for k,v in src.items():

if isinstance(v,(dict)):

flatmap(v,dst,prefix=prefix+k+'.')?? #recursion調用

else:

dst[prefix+k] = v

return dst

flatmap(src)

注:

用戶輸入的判斷,這些代碼通常比業務邏輯代碼長好幾倍,健壯的代碼無論怎么運行都不會意外崩潰;

一般不說明的情況下,都不會改源數據(源列表、源字典等);

能否不暴露給外界內部的dst;

能否函數就提供一個參數源字典,返回一個新的扁平化字典;

遞歸時要把目標字典的引用傳遞多層,如何處理;

########################

src = {'a':{'b':1,'c':2},'d':{'e':3,'f':{'g':4}}}

def flatmap(src):

def _flatmap(src,dst,prefix=''):

for k,v in src.items():

if isinstance(v,(dict)):

_flatmap(v,dst,prefix=prefix+k+'.')

else:

dst[prefix+k] = v

dst = {}

_flatmap(src,dst)

return dst

flatmap(src)

注:

不關心_flatmap函數內部如何實現,如內部用的數據結構、臨時對象、算法等,只關心調用后返回的結果;

#######################

src = {'a':{'b':1,'c':2},'d':{'e':3,'f':{'g':4}}}

def flatmap(src):

def _flatmap(src,dst,prefix=''):

for k,v in src.items():

key = prefix + k

if isinstance(v,(dict)):

_flatmap(v,dst,key+'.')

else:

dst[key] = v

dst = {}

_flatmap(src,dst)

return dst

?

flatmap(src)

?

2、

import string

import base64

alphabet = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

#teststr = 'abcd'

# teststr = 'abc'

teststr = 'ManMa'

def base(src):

ret = bytearray()

length = len(src)

r = 0

for offset in range(0,length,3):

if offset + 3 <= length:

triple = src[offset:offset+3]

else:

triple = src[offset:]

r = 3 - len(triple)

triple = triple + '\x00' * r

#print(triple,r)

b = int.from_bytes(triple.encode(),'big')

#print(hex(b))

for i in range(18,-1,-6):

if i == 18:

index = b >> i

else:

index = b >> i & 0x3F

ret.append(alphabet[index])

for i in range(1,r+1):

??????????ret[-i] = 0x3D

return bytes(ret)

print(base(teststr))

print('*' * 50)

print(base64.b64encode(teststr.encode()))

注:

alphabet = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/'

3、

def findit(str1,str2):

length = len(str1)

for sublen in range(length,0,-1):

for start in range(0,length-sublen+1):

substr = str1[start:start+sublen]

if str2.find(substr) != -1:

print('substrlen={}'.format(substr))

???????return substr

s1 = 'abcd'

s2 = 'abcefgd'

s3 = '123a'

print(findit(s1,s2))?? #傳參時要注意,str1為短字串,str2為長字串

print(findit(s1,s3))

另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網頁題目:13lambda_yield_yieldfrom_coroutine-創新互聯
網址分享:http://www.js-pz168.com/article24/iohce.html

成都網站建設公司_創新互聯,為您提供微信公眾號軟件開發關鍵詞優化電子商務自適應網站定制開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
亚洲精品成人久久久998| 日韩欧美精品一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 97超碰资源| 7777精品伊久久久大香线蕉语言| 久久久久九九九| 就去色蜜桃综合| 久久综合入口| 日本高清不卡一区二区三| 精品视频一区二区三区四区| 中文字幕成人一区| 永久久久久久| 在线日韩一区二区| 日本韩国一区二区| 91国偷自产一区二区三区观看| 日韩欧美国产精品| 久久久夜色精品亚洲| 国产欧美日韩中文久久| 中文在线一区二区| 日韩一区在线免费观看| 亚洲日本一区二区三区| 国产精品伦理一区二区| 亚洲欧洲国产专区| 亚洲卡通动漫在线| 亚洲午夜视频在线观看| 日本最新不卡在线| 国产一区二区三区四区五区入口 | 一区二区三区精品| 亚洲国产精品久久人人爱蜜臀 | 一区二区三区四区激情| 亚洲国产另类av| 日本中文字幕一区二区视频| 99re热视频精品| 国产综合精品一区二区三区| 精品视频在线免费看| 欧美一级欧美一级在线播放| 又紧又大又爽精品一区二区| 国产传媒一区在线| 91视频免费看| 欧美凹凸一区二区三区视频| 欧美一区二区网站| 国产亚洲精品超碰| 一区二区三区在线观看动漫 | 亚洲国产成人高清精品| 免费观看一级欧美片| 国产一区在线看| 99久久综合99久久综合网站| 自拍偷拍亚洲色图欧美| 欧美电影影音先锋| 久久久久亚洲综合| 亚洲黄色录像片| 久久精品国产网站| 成人av网站在线| 极品尤物一区二区三区| 四虎一区二区| 5566中文字幕一区二区电影| 亚洲欧美综合另类在线卡通| 国产不卡视频一区| 国产伦视频一区二区三区| 亚洲一区3d动漫同人无遮挡| 欧美激情综合五月色丁香小说| 狠狠色丁香久久婷婷综| 99re在线视频上| 污视频在线免费观看一区二区三区| 国产丝袜美腿一区二区三区| 国产美女娇喘av呻吟久久| 国产精品一区二区三区免费| 欧美一区二区三区啪啪| 中文字幕一区二区三区不卡在线| 岛国精品在线播放| 美女主播视频一区| 欧美日韩视频不卡| 国产日韩欧美精品综合| 亚洲国产精品尤物yw在线观看| 国产精品久久久对白| 色8久久精品久久久久久蜜| 欧美电影免费提供在线观看| 久色婷婷小香蕉久久| 91精品国产综合久久久久久丝袜| 在线播放日韩导航| 亚洲婷婷综合色高清在线| 麻豆一区二区三| 国产精品推荐精品| 在线视频欧美区| 国产精品污网站| 久久狠狠亚洲综合| 国产自产精品| 欧美日韩成人一区| 成人欧美一区二区三区1314| 91毛片在线观看| 色综合久久综合| 久久久久国产免费免费| 天天操天天色综合| 91超碰在线电影| 色综合久久66| 亚洲国产激情av| 久久不见久久见免费视频1| 国产精品久久国产精品| 欧美日本在线一区| 中文在线资源观看网站视频免费不卡| jiyouzz国产精品久久| 亚洲精品乱码久久久久久蜜桃91 | 午夜精品一区二区三区免费视频| 欧美午夜精品久久久久免费视 | 五月婷婷激情综合网| 91毛片在线观看| 欧美婷婷六月丁香综合色| 中文字幕一区二区三区在线观看 | 欧美精品一区二区三区视频| 成人一区二区三区| 综合国产精品久久久| 国产精品乱码一区二三区小蝌蚪| 91九色露脸| 欧美精品18+| 亚洲图片欧美一区| 99精彩视频在线观看免费| 欧美午夜精品一区二区蜜桃| 美女一区二区在线观看| 欧美另类一区| 欧美成人一区二区三区片免费 | 亚洲高清久久久| www.久久久| 91精品国产美女浴室洗澡无遮挡| 国产精品 日产精品 欧美精品| 欧美一区二区精美| 日韩av在线播放中文字幕| 精品蜜桃传媒| 26uuu色噜噜精品一区| 激情综合色播激情啊| 亚洲第一在线综合在线| 国产精品免费看片| 成人免费高清在线| 精品视频1区2区3区| 亚洲一区二区在线免费观看视频| 天天综合色天天综合色hd| 欧美激情一区三区| 床上的激情91.| 欧洲在线/亚洲| 亚洲1区2区3区4区| 久久久久久九九九九| 久久精品一区二区三区不卡 | 国产亚洲一区二区三区四区| 国产精品国模大尺度私拍| 欧美另类变人与禽xxxxx| 丝袜国产日韩另类美女| 欧美日韩精品不卡| 国产精品精品国产色婷婷| 91美女片黄在线| 亚洲精品一区二区精华| 国产精品99久久久久久似苏梦涵| 精品va天堂亚洲国产| 成人手机电影网| 91精品国产入口| 国产真实乱子伦精品视频| 色婷婷av久久久久久久| 亚洲国产精品一区二区久久| 欧美视频中文字幕| 日本美女一区二区| 在线观看免费91| 亚洲成人福利片| 日韩偷拍一区二区| 一区二区三区在线高清| 久久综合九九| 亚洲免费观看高清完整版在线| 色综合视频在线观看| 日韩有码一区二区三区| 亚洲一卡二卡三卡| 午夜精品在线视频一区| 色噜噜狠狠色综合网| 亚洲一区欧美一区| 欧洲精品久久| 一区二区三区小说| 日韩欧美亚洲日产国| 一区二区三区中文在线观看| 欧美日韩一区二区三区视频| 暴力调教一区二区三区| 久久夜色精品国产噜噜av| 国产酒店精品激情| 欧美精品18+| 国产aⅴ综合色| 精品久久国产字幕高潮| 波多野结衣中文字幕一区二区三区| 中文字幕一区二区三区视频| 欧洲国内综合视频| 狠狠色丁香久久婷婷综合_中| 欧美激情综合网| 久久草视频在线看| 一区二区三区91| 亚洲在线色站| 六月丁香婷婷久久| 欧美日本在线看| 成人黄色电影在线| 26uuu精品一区二区| 国产91免费视频| 亚洲欧美偷拍卡通变态| 神马影院午夜我不卡| 秋霞影院一区二区| 欧美日韩精品是欧美日韩精品| 成人免费在线一区二区三区| 日韩成人免费在线|