【问题标题】:Can you call a function like this: func(x)(y)?你能调用这样的函数吗:func(x)(y)?
【发布时间】:2018-11-15 23:20:06
【问题描述】:

我知道你可以这样调用 python 函数:

func(x,y,z) 

但是你可以调用这样的函数吗?

func(x)(y)

【问题讨论】:

  • 是的,如果 func(x) 返回一个可调用对象。
  • 把它想象成a = func(x); a(y) 和/或(func(x))(y) - 也就是说,评估是从左到右的,每次调用都是基于一个不同的 可调用表达式。 Python 不隐式支持偏应用/偏函数;必须为此模拟形式修改原始功能。 (are functions to wrap an existing function as a partial function,但这不是 Python 固有的,上面的规则仍然适用。)
  • 你是问能不能把参数x绑定到函数上,然后用附加参数y调用?如果是这样,请查看 functools.partial()。

标签: python python-3.x


【解决方案1】:

是的,如果函数返回一个函数对象。例如:

def a(x):
    def b(y):
        return x + y
    return b
print(a(2)(3))

输出:5

【讨论】:

    【解决方案2】:

    这仅在您创建子例程时有用

    一个愚蠢的例子:

    a = lambda x,y: lambda z: x+y+z
    a(1,1)(3)
    5
    

    这个例子没有意义。为了理解这一点,我们可以这样做:

     a = lambda x:lambda y:y**(1/x)
    >>> a(2)(4)
    2.0
    >>> a(2)(16)
    4.0
    >>> sqrt = a(2)
    >>> sqrt(4)
    2.0
    >>> cubert = a(3)
    >>> cubert(8)
    2.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 2011-04-28
      • 1970-01-01
      相关资源
      最近更新 更多