在Ruby中,块参数的工作方式如下:
def method (&block)
block.call(4)
end
method do |x|
puts x
puts x * 2
end
=begin
4
8
=end
我已经在Python中看到了以下等效项,但我发现它并不令人满意,因为它需要定义函数,然后才将定义为参数:
def method(block):
block(4)
def call(x):
print(x)
print(x * 2)
method(call)
'''
4
8
'''
Python中是否有替代方法,不需要先定义函数?
答案 0 :(得分:1)
不,python不允许使用这种语法糖,它没有匿名函数;它提供的最接近的是 lambdas ,但是它们有很多限制,即,它们只能有一个表达式,即,一行“代码”。
使用def
定义函数是创建可重用代码块的Python方法。
答案 1 :(得分:0)
我发现最接近作为参数且没有预先定义的函数的是Python装饰器,它们具有有用的语法糖:
def loop_thru(block):
arr = [3, 76, 2, 8, 24]
for item in arr:
block(item)
@loop_thru
def puts(item):
print(item)
"""
3
76
2
8
24
"""
这样做仍然可以定义一个函数,但是您不必费心编写一个函数调用,然后意识到您需要首先定义一个函数。 python装饰器允许函数定义位于将其作为参数的函数旁边。