亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2155 | 回復(fù): 5
打印 上一主題 下一主題

閉包與協(xié)程? [復(fù)制鏈接]

論壇徽章:
1
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-25 06:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-12-22 19:15 |只看該作者 |倒序瀏覽
下面的測試閉包比協(xié)程快,閉包應(yīng)用起來較方便,協(xié)程有個啟動與退出問題,只是個人見解
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. import time

  4. class Table:
  5.     __slots__ = ('index','vals')
  6.     def __init__(self):
  7.         self.index = {0:0,3:1,6:2}
  8.         self.vals = [0.36,1.25,2.25]
  9.     def __getitem__(self,mon):
  10.         return self.vals[self.index[mon]]
  11.         
  12. def timeTest(fn):
  13.     def test(*a,**k):
  14.         tm = time.clock()
  15.         fn(*a,**k)
  16.         print(time.clock()-tm)
  17.     return test
  18.    
  19. def test_bb():  # 閉包
  20.     s = Table()
  21.     def _index(mon):
  22.         nonlocal s
  23.         try:
  24.             return s[mon]
  25.         except Exception:
  26.             return 0.0
  27.     return _index

  28. def test_xc()   :# 協(xié)程
  29.     s = Table()
  30.     item = None
  31.     while True:
  32.         mon = yield item
  33.         try:
  34.             item = s[mon]
  35.         except Exception:
  36.             item = 0.0
  37. @timeTest         
  38. def get_bb():
  39.     j = 0
  40.     t = test_bb()
  41.     while j < 10000:
  42.         for i in [0,3,6]:
  43.             t(i)
  44.         j += 1
  45. @timeTest
  46. def get_xc():
  47.     j = 0
  48.     t = test_xc()
  49.     t.send(None)
  50.     while j < 10000:
  51.         for i in [0,3,6]:
  52.             t.send(i)
  53.         j += 1
  54.     t.close()
  55.    
  56.   
  57. if __name__ == '__main__':  
  58.     get_bb()
  59.     get_xc()
  60.    
復(fù)制代碼

評分

參與人數(shù) 1信譽積分 +10 收起 理由
substr函數(shù) + 10 贊一個!

查看全部評分

論壇徽章:
26
2015亞冠之胡齊斯坦鋼鐵
日期:2015-06-25 21:40:202015亞冠之柏斯波利斯
日期:2015-08-31 17:03:192015亞冠之柏斯波利斯
日期:2015-11-07 13:10:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-10 06:20:00每日論壇發(fā)貼之星
日期:2015-11-10 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-26 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-02 06:20:00黃金圣斗士
日期:2015-12-07 17:57:4615-16賽季CBA聯(lián)賽之天津
日期:2015-12-23 18:34:14程序設(shè)計版塊每日發(fā)帖之星
日期:2016-01-02 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-01-06 06:20:00每日論壇發(fā)貼之星
日期:2016-01-06 06:20:00
2 [報告]
發(fā)表于 2015-12-23 11:38 |只看該作者
回復(fù) 1# micrchaoo


   
def timeTest(fn):
    def test(*a,**k):
        tm = time.clock()
        fn(*a,**k)
        print(time.clock()-tm)
    return test


寫的真好,今天一天都在你這學(xué)習(xí),收獲頗豐,
先mark一下,以后可能還要參考。

論壇徽章:
0
3 [報告]
發(fā)表于 2015-12-23 13:58 |只看該作者
本帖最后由 huangxiaohen 于 2015-12-23 14:15 編輯

我是新手,難道用個yield就是協(xié)程了?我書讀的少,可不要騙我.
除了在twisted以及tornado中的特殊搭配用法外,yield就是個迭代的作用而已。
而且yield的返回值是一個generator,怎么可能拿來直接去字典里當(dāng)做key去取。

論壇徽章:
26
2015亞冠之胡齊斯坦鋼鐵
日期:2015-06-25 21:40:202015亞冠之柏斯波利斯
日期:2015-08-31 17:03:192015亞冠之柏斯波利斯
日期:2015-11-07 13:10:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-10 06:20:00每日論壇發(fā)貼之星
日期:2015-11-10 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-26 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-02 06:20:00黃金圣斗士
日期:2015-12-07 17:57:4615-16賽季CBA聯(lián)賽之天津
日期:2015-12-23 18:34:14程序設(shè)計版塊每日發(fā)帖之星
日期:2016-01-02 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-01-06 06:20:00每日論壇發(fā)貼之星
日期:2016-01-06 06:20:00
4 [報告]
發(fā)表于 2015-12-23 18:15 |只看該作者
回復(fù) 3# huangxiaohen

個人見解
可能是這樣的:
協(xié)程,英文名Coroutine。


co- [together] [協(xié)同][協(xié)]

test_xc: 生產(chǎn)者協(xié)程
get_xc: 消費者協(xié)程

協(xié)程看上去是子程序,
但執(zhí)行過程中,
在子程序內(nèi)部可中斷,
然后轉(zhuǎn)而執(zhí)行別的子程序 (不是函數(shù)調(diào)用),
在適當(dāng)?shù)臅r候再返回來接著執(zhí)行。



論壇徽章:
26
2015亞冠之胡齊斯坦鋼鐵
日期:2015-06-25 21:40:202015亞冠之柏斯波利斯
日期:2015-08-31 17:03:192015亞冠之柏斯波利斯
日期:2015-11-07 13:10:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-10 06:20:00每日論壇發(fā)貼之星
日期:2015-11-10 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-26 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-02 06:20:00黃金圣斗士
日期:2015-12-07 17:57:4615-16賽季CBA聯(lián)賽之天津
日期:2015-12-23 18:34:14程序設(shè)計版塊每日發(fā)帖之星
日期:2016-01-02 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-01-06 06:20:00每日論壇發(fā)貼之星
日期:2016-01-06 06:20:00
5 [報告]
發(fā)表于 2015-12-23 18:33 |只看該作者
回復(fù) 3# huangxiaohen


   
而且yield的返回值是一個generator,怎么可能拿來直接去字典里當(dāng)做key去取。


t = test_xc()
t 是一個generator



mon = yield item


yield的返回值 是 mon

t.send(i) ==> mon
mon 是  i
i 不是一個generator

論壇徽章:
26
2015亞冠之胡齊斯坦鋼鐵
日期:2015-06-25 21:40:202015亞冠之柏斯波利斯
日期:2015-08-31 17:03:192015亞冠之柏斯波利斯
日期:2015-11-07 13:10:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-10 06:20:00每日論壇發(fā)貼之星
日期:2015-11-10 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-11-26 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-02 06:20:00黃金圣斗士
日期:2015-12-07 17:57:4615-16賽季CBA聯(lián)賽之天津
日期:2015-12-23 18:34:14程序設(shè)計版塊每日發(fā)帖之星
日期:2016-01-02 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-01-06 06:20:00每日論壇發(fā)貼之星
日期:2016-01-06 06:20:00
6 [報告]
發(fā)表于 2015-12-24 10:05 |只看該作者
回復(fù) 3# huangxiaohen


   
generator,拿來字典里當(dāng)做key。
也是可以的 [ ]
  1. #!/usr/bin/python2
  2. # coding: utf-8


  3. def G1():
  4.     for i in xrange(3):
  5.         yield i


  6. g = G1()

  7. print g # <generator object G1 at 0x7f85373bd500>


  8. D = {}
  9. D[g] = 5

  10. print D[g]      # 5
  11. print D.keys()  # [<generator object G1 at 0x7f85373bd500>]

復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP