Python具有多个参数括号

我一直无法理解h(a)(b)含义。 我以前从未见过其中之一,我也无法这样声明函数:

def f (a)(b):
    return a(b)

当我试图做def f (a, b):它也不起作用。 这些功能是做什么的? 我该如何申报? 最后, f(a, b)f(a)(b)之间有什么区别


正如您在尝试定义一个时所看到的那样,具有多个参数括号的函数不存在。 然而,有些函数返回(其他)函数:

def func(a):
    def func2(b):
        return a + b
    return func2

现在,当你调用func()它会返回内部的func2函数:

>>> func2 = func(1)  # You don't have to call it func2 here
>>> func2(2)
3

但是如果你以后不需要内部函数,那么就不需要将它保存到一个变量中,你可以一个接一个地调用它们:

>>> func(1)(2)   # func(1) returns func2 which is then called with (2)
3

定义带参数的装饰器时,这是一个非常常见的习惯用法。


请注意,调用func()总是会创建一个新的内部函数,即使它们在我们的func定义中都被命名为func2

>>> f1 = func(1)
>>> f2 = func(1)
>>> f1(1), f2(1)
(2, 2)
>>> f1 is f2
False

最后, f(a, b)f(a)(b)之间有什么区别

现在应该清楚你知道f(a)(b)做了什么,但总结一下:

  • f(a, b)用两个参数ab调用f
  • f(a)(b)用一个参数a调用f ,然后返回另一个函数,然后用一个参数b调用函数

  • f(a)(b)只意味着表达式f(a)返回一个本身可调用的值。 这是一种简短的形式

    g = f(a)
    g(b)
    

    你可能会更舒适地添加一对冗余括号来强调这不是一个单一的句法结构。

    (f(a))(b)  # f(a) is evaluated first, then the result is applied to b
    

    这与用于索引嵌套字典的方括号相同。

    d1[x][y]
    

    相当于

    d2 = d1[x]
    d2[y]
    

    可以说我们有一个表达式

    f(a)(b)
    

    那么, f(a)返回一个函数本身,它被参数b调用。 考虑下面的例子

    def f(a):
       def g(b):
          return a * b
       return g
    

    然后f(5)(4)评估为5 * 4 ,因为f(5)返回基本上的函数

    def g(b):
       return 5 * b
    

    现在可以做这样的事情了

    mult_by_5 = f(5)
    [mult_by_5(x) for x in range(10)]
    

    让我们来看看,更多嵌套函数呢?

    def f(a):
      def g(b):
        def h(c):
          return a * b *c
        return h
      return g
    f(2)(3)(4) # 24
    
    链接地址: http://www.djcxy.com/p/70605.html

    上一篇: Python functions with multiple parameter brackets

    下一篇: Removing a "default" <option> in a select box