函数后的括号是什么意思

时间:2018-05-04 08:28:36

标签: python python-3.x function

我被要求在Python 3中编写一个函数: 编写一个名为general_poly的函数,例如,将general_poly([1, 2, 3, 4])(10)评估为1234,因为1*10^3 + 2*10^2 + 3*10^1 + 4*10^0

现在我不明白第二个括号(10)是什么意思。

我的函数general_poly如何知道,将该值置于其中并使用它?

3 个答案:

答案 0 :(得分:10)

这意味着你的函数应该返回一个函数:

def multiplier(times):
    def inner(num):
         return num * times
    return inner

result = multiplier(2)(3)
print(result)
# 6

times_four = multiplier(4)
print(times_four(3))
# 12

这可能是也可能不是一种矫枉过正,但如果您需要保存状态,您甚至可以使用课程并实施__call__

class multiplier:
    def __init__(self, times):
        self.times = times
    def __call__(self, num):
        return num * self.times

print(multiplier(2)(3))
# 6

答案 1 :(得分:1)

函数是Python中的first-class object。其中一个推论是函数可能返回另一个函数。

您的具体示例可以写成如下:

def general_poly(A):
    k = len(A)
    def power(n):
        return sum(j*n**(k-i) for i, j in enumerate(A, 1))
    return power

res = general_poly([1, 2, 3, 4])(10)  # 1234

外部函数general_poly 返回内部函数power。前者采用列表或数组,而后者采用标量。

构建逻辑的另一种方法是使用functools.partial。这创建了一个新函数,其中一个或多个参数被修复并且不需要内部函数。

from functools import partial

def general_poly(A, n):
    k = len(A)
    return sum(j*10**(k-i) for i, j in enumerate(A, 1))

genral_poly_10 = partial(general_poly, n=10)
res = genral_poly_10([1, 2, 3, 4])  # 1234

当然,这仅在您希望为特定功率创建功能时才有用;简而言之,n可以直接用作没有functools.partial的附加参数。

注意Beware of mutable default arguments。因此,如果您的函数具有可变的默认参数,例如在上面的示例中设置A=[],可能会以不可预见的方式重复使用相同的列表。

答案 2 :(得分:0)

第二组paranthesis实际上并不与函数交互,它们适用于函数返回的任何内容。它与returnsAList()[0]的原理相同,它会为您提供returnsAList()返回的列表的第一个元素。