有没有什么方法可以在Python中传递块参数而无需先将其定义为函数?

时间:2019-10-03 01:22:53

标签: python callback arguments

在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中是否有替代方法,不需要先定义函数?

2 个答案:

答案 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装饰器允许函数定义位于将其作为参数的函数旁边。