我有一个任务是用高阶函数(函数1)写一段代码。但是,我不知道为什么我应该这样写它,而不是正常的(函数2)。如果有人能告诉我什么时候高阶函数更好,我将不胜感激。
# Function 1 (High order):
def high_function (L):
def function (x):
total = 0
for i in range(len(L)):
total = total + x **(len(L) - 1 - i) * L[i]
return total
return function
# Function 2 (Normal):
def high_function (L, x):
total = 0
for i in range(len(L)):
total = total + x **(len(L) - 1 - i) * L[i]
return total发布于 2017-11-06 01:21:40
首先,给你的函数起一个更好的名字,这样用法就更清楚了:
def polynomial(factors):
def eval(x):
result = 0
for factor in factors:
result = x * result + factor
return result
return eval因此,该函数用于定义一个多项式,该多项式可用于评估不同的x
parabola = polynomial([1, 0, 0])并在其他地方使用它:
value = parabola(0.4)发布于 2017-11-06 01:20:57
我缺乏函数式编程的正式知识,但本质上,拥有高阶函数允许您根据需要创建函数并将其传递给其他高阶函数。
就像对象可以接受其他对象一样,将函数视为一等公民的语言允许将函数传递给其他函数。
考虑这个例子,
def add(a):
def func(b):
return a + b
return func 此add函数可用于根据需要创建函数
twoMore = add(2)
x = 10
xPlusTwo = twoMore(x)请注意,当您在函数中创建函数时,内部函数位于闭包中,并且可以访问外部函数的作用域。对于add函数,内部func在a由add返回并在twoMore中使用时可以访问它。
为了结束我关于传递函数的观点,请考虑下面这个示例
def filter_list(valid, list):
return [item for item in list
if valid(item)]
def is_greater_than(value):
def func(item):
return item > value
return func
my_list = [1,2,3,4,5,6,7]
gt5 = is_greater_than(5)
new_list = filter_list(gt5, my_list)https://stackoverflow.com/questions/47124302
复制相似问题