簡體   English   中英

函數后的括號是什么意思

[英]What does the parenthesis after the function mean

我被要求在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如何知道,將該值置於其自身並使用它?

這意味着你的函數應該返回一個函數:

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

函數是Python中的第一類對象 其中一個推論是函數可能返回另一個函數。

您的特定示例可以編寫如下:

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


注意注意可變的默認參數 因此,如果您的函數具有可變的默認參數,例如在上面的示例中設置A=[] ,則可以以不可預見的方式重用相同的列表。

第二組paranthesis實際上並不與函數交互,它們適用於函數返回的任何內容。 它與returnsAList()[0]原理相同,它將為您提供returnsAList()返回的列表的第一個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM