如何使用函数对象和值作为参数在Python中实现双阶乘

如何使用函数对象和值作为参数在Python中实现双阶乘,python,Python,我刚刚开始学习Python,遇到了一个问题,这是我在过去4个小时里一直在尝试的。我还查看了这个论坛上的另一个问题的双重因素,但这并没有多大帮助 我想创建一个函数调用doublefact,它将函数对象f和值v作为参数,并返回f(f(v))。 例如,如果f是阶乘函数,则doublefact(f,3)返回(3!)=6! = 720 我所做的更接近于此,但没有得到正确的输出,并且遇到了很多错误 def factorial(n): num = 1 while n >= 1: nu

我刚刚开始学习Python,遇到了一个问题,这是我在过去4个小时里一直在尝试的。我还查看了这个论坛上的另一个问题的双重因素,但这并没有多大帮助

我想创建一个函数调用doublefact,它将函数对象f和值v作为参数,并返回f(f(v))。 例如,如果f是阶乘函数,则doublefact(f,3)返回(3!)=6! = 720

我所做的更接近于此,但没有得到正确的输出,并且遇到了很多错误

def factorial(n):
   num = 1
   while n >= 1:
    num = num * n
    n = n - 1
   print(num)

def doublefact(factorial,m):
    temp=factorial(m)
    temp1=factorial(temp)
    print(factorial(temp1))


doublefact(factorial,3)
输出:

 >>> 6
Traceback (most recent call last):
  File "C:/Python34/practice/factorial.py", line 15, in <module>
    doublefact(factorial,3)
  File "C:/Python34/practice/factorial.py", line 11, in doublefact
    temp1=factorial(temp)
  File "C:/Python34/practice/factorial.py", line 4, in factorial
    while n >= 1:
TypeError: unorderable types: NoneType() >= int()
>>> 
>6
回溯(最近一次呼叫最后一次):
文件“C:/Python34/practice/factorial.py”,第15行,在
双重事实(阶乘,3)
文件“C:/Python34/practice/factorial.py”,第11行,事实上
temp1=阶乘(temp)
文件“C:/Python34/practice/factorial.py”,factorial中的第4行
当n>=1时:
TypeError:无序类型:NoneType()>=int()
>>> 

问题在于,
阶乘函数中没有返回任何值。使用
returnnum
代替
print(num)
。如果Python中没有
return
语句,那么函数的默认返回值是
None
,这就是您所经历的

另外,您的
doublefact
函数存在一个问题,它计算阶乘三次:as
factorial(m)
factorial(temp)
factorial(temp1)

3

>>> def factorial(n):
...    num = 1
...    while n >= 1:
...     num = num * n
...     n = n - 1
...    return num
... 
>>> def doublefact(factorial,m):
...     temp=factorial(m)
...     return factorial(temp)
... 
>>> 
>>> doublefact(factorial, 3)
720

我知道这是一个学习练习,所以这个答案不是很有意义。作为将来的参考,Python在数学模块中提供了一个阶乘函数。比如说,

In [26]:

import math
print math.factorial(math.factorial(3)) # 720

这应该是一个注释为什么您的
doublefactorial
函数依赖于
factorial
函数作为参数?你为什么要改变它?你可能指的是更一般的东西,比如
apply\u function\u两次(some\u function,m)
。这不会改变函数的功能,只会改变它的调用;另请注意,与您的功能不同。作为与特定问题不太相关的旁注。。。不要试图制定缩进的规则;只需按照流程,缩进4个空格,永远不要使用制表符。。。Python的体验会更好。让压痕规则与C++进行斗争,那不是真正的自由…只是制造混乱的自由