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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3846 | 回復(fù): 2
打印 上一主題 下一主題

被yield弄暈了 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-03-01 15:40 |只看該作者 |倒序?yàn)g覽
本帖最后由 hp_truth 于 2011-03-01 15:42 編輯

剛開(kāi)始學(xué)python,看python基礎(chǔ)教程那本書,被里面的yield弄暈了。
里面提到用yield解決八皇后問(wèn)題, 人家好像都講明白了,就是自己理解起來(lái)有點(diǎn)困難。
后來(lái)還是通過(guò)對(duì)比以前的方法來(lái)理解yield, 稍微好點(diǎn)了。
  1. #! /usr/bin/env python

  2. __metaclass__ = type

  3. # 判斷沖突的函數(shù)
  4. def conflict(state, nextX):
  5.     nextY = len(state)
  6.     for i in range(nextY):
  7.         if abs(state[i] - nextX) in (0, nextY - i):
  8.             return True
  9.     return False

  10. # 書上的方法
  11. def queen1(num = 8, state = ()):
  12.     for pos in range(num):
  13.         if not conflict(state, pos):
  14.             if len(state) == num -1:
  15.                 yield (pos,)
  16.             else:
  17.                 for i in queen1(num, state + (pos,)):
  18.                     yield i + (pos,)

  19. # 以前用過(guò)的方法
  20. sum=[]
  21. def queen2(num, result = []):
  22.     if len(result) == num:
  23.         sum.append(result)
  24.     else:
  25.         for pos in range(num):
  26.             if not conflict(result, pos):
  27.                 queen2(num, result + [pos])


  28. # 參照以前的方法, 對(duì)書上的方法稍微改了一下
  29. # 比書上的方法多了幾次函數(shù)調(diào)用, 主要是體驗(yàn)一下
  30. # 遞歸調(diào)用中用到了幾次yield, 但對(duì)外界來(lái)說(shuō),
  31. # 應(yīng)該是 ‘yield i + [pos] 這 一句是真正的返回一種八皇后方案。
  32. # 而‘yield []’只是內(nèi)部遞歸調(diào)用時(shí)返回。
  33. def queen3(num, result = []):
  34.     if len(result) == num:
  35.         yield []
  36.     else:
  37.         for pos in range(num):
  38.             if not conflict(result, pos):
  39.                 for i in queen3(num, result + [pos]):
  40.                     yield i + [pos]



  41. def prettyprint(solution):
  42.     def line(pos, length=len(solution)):
  43.         return '. ' * (pos) + 'X ' + '. ' * (length-pos-1)
  44.     for pos in solution:
  45.         print line(pos)


  46. import random
  47. print len(list(queen1( 8 )))
  48. prettyprint(random.choice(list(queen1( 8 ))))

  49. queen2( 8 )
  50. print len(list(sum))
  51. prettyprint(random.choice(list(sum)))

  52. print len(list(queen3( 8 )))
  53. prettyprint(random.choice(list(queen3( 8 ))))

  54. i = queen3( 8 )
  55. print i.next()
復(fù)制代碼

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-03-02 21:27 |只看該作者
不用
沒(méi)用
從來(lái)不用,還是一樣用python寫程序

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-03-03 13:25 |只看該作者
回復(fù) 2# ttvast


    赫赫,是嗎, 還是有用的, 不然干嘛提出這么個(gè)概念。 目前只知道當(dāng)需要生成大量數(shù)據(jù)的時(shí)候, 可以用yield, 減少內(nèi)存占用量, 其他的應(yīng)用還有待進(jìn)一步學(xué)習(xí))
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP