[英]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.