首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高阶函数- Python

高阶函数- Python
EN

Stack Overflow用户
提问于 2017-11-06 01:12:16
回答 2查看 585关注 0票数 0

我有一个任务是用高阶函数(函数1)写一段代码。但是,我不知道为什么我应该这样写它,而不是正常的(函数2)。如果有人能告诉我什么时候高阶函数更好,我将不胜感激。

代码语言:javascript
复制
# 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
EN

回答 2

Stack Overflow用户

发布于 2017-11-06 01:21:40

首先,给你的函数起一个更好的名字,这样用法就更清楚了:

代码语言:javascript
复制
def polynomial(factors):
    def eval(x):
        result = 0
        for factor in factors:
            result = x * result + factor
        return result
    return eval

因此,该函数用于定义一个多项式,该多项式可用于评估不同的x

代码语言:javascript
复制
parabola = polynomial([1, 0, 0])

并在其他地方使用它:

代码语言:javascript
复制
value = parabola(0.4)
票数 2
EN

Stack Overflow用户

发布于 2017-11-06 01:20:57

我缺乏函数式编程的正式知识,但本质上,拥有高阶函数允许您根据需要创建函数并将其传递给其他高阶函数。

就像对象可以接受其他对象一样,将函数视为一等公民的语言允许将函数传递给其他函数。

考虑这个例子,

代码语言:javascript
复制
def add(a):
    def func(b):
      return a + b

    return func 

add函数可用于根据需要创建函数

代码语言:javascript
复制
twoMore = add(2)
x = 10
xPlusTwo = twoMore(x)

请注意,当您在函数中创建函数时,内部函数位于闭包中,并且可以访问外部函数的作用域。对于add函数,内部funcaadd返回并在twoMore中使用时可以访问它。

为了结束我关于传递函数的观点,请考虑下面这个示例

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47124302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档