当前位置: 首页 > 知识库问答 >
问题:

如何在python中编写函数n次

潘振国
2023-03-14

我知道如何通过将两个函数作为输入并输出其合成函数来合成两个函数,但如何返回合成函数f(f(…f(x))?谢谢

def compose2(f, g):
    return lambda x: f(g(x))

def f1(x):
    return x * 2
def f2(x):
    return x + 1

f1_and_f2 = compose2(f1, f2)
f1_and_f2(1)

共有3个答案

乜业
2023-03-14

如果你想让它成为一行作文,

那就试试这个,

def f1(x):
    return x * 2
def f2(x):
    return x + 1

>>> out = lambda x, f=f1, f2=f2: f1(f2(x)) # a directly passing your input(1) with 2 function as an input (f1, f2) with default so you dont need to pass it as an arguments
>>> out(1)
4
>>> 

>>> def compose(f1, n):
...   def func(x):
...     while n:
...       x = f1(x)
...       n = n-1
...     return x
...   return func

>>> d = compose(f1, 2)
>>> d(2)
8
>>> d(1)
4
>>> 
方浩旷
2023-03-14

请注意,这主要是从https://stackoverflow.com/a/16739439/2750819复制的,但我想清楚地说明如何将其应用于任何一个函数n次。

def compose (*functions): 
    def inner(arg): 
        for f in reversed(functions): 
            arg = f(arg) 
        return arg 
    return inner

n = 10
def square (x): 
    return x ** 2

square_n = [square] * n
composed = compose(*square_n)
composed(2)

输出

179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216
南宫云
2023-03-14

在嵌套函数中使用循环:

def compose(f, n):
    def fn(x):
        for _ in range(n):
            x = f(x)
        return x
    return fn

fn将具有闭包,该闭包保留对调用composefn的引用。

 类似资料:
  • 本文向大家介绍如何在Python中编写递归函数?,包括了如何在Python中编写递归函数?的使用技巧和注意事项,需要的朋友参考一下 一个递归 函数是它的执行过程中调用自身的函数。这使函数可以重复多次,输出结果和每次迭代的结束。递归与无限有关。  下面是一个递归函数示例,用于查找整数的阶乘。 数字的阶乘 是从1到该数字的所有整数的乘积。  例如,阶乘9(表示为9!)为1 * 2 * 3 * 4 *

  • 假设我们在下面的数据框中有一个带有

  • 问题内容: 我是Firebase的新手。我正在使用admin sdk(java code)将数据存储在firebase数据库中。我已经成功完成了这一部分。现在我想在创建数据库条目和通知时写火基础云函数 由于我在Internet上搜索了更多内容,因此仅找到了node.js代码。 https://firebase.google.com/docs/functions/开始 是否可以使用admin SDK

  • 问题内容: 我有一个函数数组,我试图产生一个由数组中元素组成的函数。我的方法是: 此方法似乎无效,将不胜感激。 (我要反转列表,因为这是我希望函数成为的组合顺序) 问题答案: 它不起作用,因为您在循环中创建的所有匿名函数都引用相同的循环变量,因此共享其最终值。 作为快速解决方案,您可以将分配替换为: 或者,您可以从函数返回lambda: 要了解发生了什么,请尝试以下实验: 这个结果使许多人感到惊讶

  • 我有一个函数数组,我试图生成一个函数,它由数组中的元素组成。我的做法是: 此方法似乎不起作用,请给予帮助。 (我正在反转列表,因为这是我希望函数的组合顺序)

  • 我在Emacs中使用Clojure和苹果酒REPL。 在苹果酒REPL中有可能有多行功能吗?我该怎么做呢?