回答
在ruby中,yield是一個用於調用匿名函數的快捷方式。 Ruby具有將匿名函數傳遞給方法的特殊語法;該語法被稱爲block
。由於該功能還沒有名字,您使用的名稱產生調用的函數:
def do_stuff(val)
puts "Started executing do_stuff"
yield(val+3)
yield(val+4)
puts "Finshed executing do_stuff"
end
do_stuff(10) {|x| puts x+3} #<= This is a block, which is an anonymous function
#that is passed as an additional argument to the
#method do_stuff
--output:--
Started executing do_stuff
16
17
Finshed executing do_stuff
在蟒蛇,當你看到一個函數的定義,這意味着該函數是generator
內部收益率。生成器是一種特殊類型的函數,可以在執行中停止並重新啓動。這裏有一個例子:
def do_stuff(val):
print("Started execution of do_stuff()")
yield val + 3
print("Line after 'yield val + 3'")
yield val + 4
print("Line after 'yield val + 4'")
print("Finished executing do_stuff()")
my_gen = do_stuff(10)
val = next(my_gen)
print("--received {} from generator".format(val))
輸出:
Started execution of do_stuff()
--received 13 from generator
更多代碼:
val = next(my_gen)
print("--received {} from generator".format(val))
輸出:
從輸出中,你可以看到,yield
導致結果被遣返d;那麼執行立即停止。當你再次在生成器上調用next()時,將繼續執行,直到遇到下一個yield語句,該語句返回一個值,然後執行再次停止。
基本上,Python的'yield'關鍵字等同於Ruby的'Enumerator: :Yielder#yield'。 –
謝謝!我不知道Enumerator :: Yielder類! – noname
關於'Enumerator :: Yielder'和'Enumerator :: Generator'的更多細節我推薦:http://patshaughnessy.net/2013/4/3/ruby-2-0-works-hard-so-you-可待懶 –
在Ruby中,收益率用於反彈控制以阻止(如匿名函數)執行塊的語句,然後彈回到塊的調用位置。
隨着yield args
你可以傳遞參數來將擋,並與lvar = yield
你可以得到什麼回來了,它控制退出塊之後綁定到LVAR。這是Ruby中一個非常普遍且一致的功能設計。當然, 你可以應用這個想法迭代集合。
而在Python中,大部分人使用產量,以方便項目在一定程度上收集有效訪問,他們專注於迭代一次,並實時生成,一旦被稱爲的想法,這是主要的使用產量的在Python中。
僅供參考,至少在使用它的方式上,Python和Ruby之間的差異性不大,收益率爲。 (顯然它們的實現方式不同,至於python,yield創建了一個生成器,除非迭代開始,否則它將不會運行任何代碼)。例如,在Python中使用產生的方式在Ruby中與上下文管理器完全相同。
from contextlib import contextmanager
@contextmanager
def openfile(name, mode):
f= open(name, mode)
yield f
f.close()
with openfile('log.txt', 'r') as handle:
for line in handle:
print line
這裏,產量通文件句柄與,並執行與語句恰好一次,然後反彈至文件關閉聲明
- 1. JS發電機:「收益率」與「收益率」有什麼不同?
- 2. 事件與收益率
- 3. C#收益率返回
- 4. 遞歸收益率(RoR)
- 5. 收益率回報長度
- 6. C中的收益率#
- 7. 計算回報率內部收益率
- 8. Scrapy/Python:以收益率處理值
- 9. 與lodash收益率意外輸出
- 10. 如何與異常收益率產生
- 11. 作爲作業有什麼收益? myVar的=(收益率)
- 12. 收益率傳奇打字稿類型錯誤收益率全部
- 13. 將收益率轉換成VB.NET
- 14. im2double收益率不同的結果
- 15. C#收益率是否解鎖?
- 16. C#收益率回報預期
- 17. 在Java中的收益率返回
- 18. 蒂收益率不同的字符串
- 19. Excel中鞏固收益率唯一值
- 20. 紅寶石概念 - 收益率
- 21. Notes會話收益率的票據URL
- 22. 替代方式編寫收益率
- 23. WCF序列化收益率 - 菜鳥
- 24. 不同進程之間的收益率
- 25. 個月上月基金收益率(%)
- 26. 錯誤:流收益率的NodeJS(Windows)中
- 27. 方法採用收益率回報
- 28. 針對多個塊的收益率
- 29. 一些幫助理解「收益率」
- 30. 什麼是平均收益率無(tornado.gen.moment)
我會回答,但我想想[這](http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do-in-python)涵蓋了它 – Alex