Python 产量与 Ruby 产量

标签 python ruby yield

在 Ruby 中,yield 关键字用于让出执行 block 的闭包。

这个关键字在 Python 语言中有何不同?

最佳答案

在 ruby​​ 中,yield 是用于调用匿名函数的快捷方式。 Ruby 有一种特殊的语法,用于将匿名函数传递给方法;该语法称为 block 。因为该函数没有名称,所以您使用名称 yield 来调用该函数:

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

在 python 中,当您在函数定义中看到 yield 时,这意味着该函数是一个生成器。生成器是一种特殊类型的函数,可以在执行过程中停止并重新启动。这是一个例子:

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))

输出:

Line after 'yield val + 3'
--received 14 from generator

从输出中,您可以看到 yield 导致返回一个结果;然后立即停止执行。当您在生成器上再次调用 next() 时,执行将继续,直到遇到下一个返回值的 yield 语句,然后执行再次停止。

关于Python 产量与 Ruby 产量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35639401/

相关文章:

python - 是否可以从另一个静态方法中调用静态方法

Python mysqldb : Library not loaded: libmysqlclient. 18.dylib

python - 无法访问instancemethod属性?

web-scraping - 将 url 传递到从 RabbitMQ 使用的 scrapy 中的解析方法

javascript - 语法错误 : Unexpected Identifier (Generators in ES6)

python - 获取 Windows 目录中的每个文件

ruby-on-rails - Redis随机开始提示无法保存RDB快照

Ruby 覆盖类方法

ruby - 这个方法 'method'是否抛出此错误消息?

Mysql 的每一行与其他表中的数据一起获取