Jam*_*ith 5 python higher-order-functions
我正在尝试在python中编写一个函数,如:
def repeated(f, n):
...
Run Code Online (Sandbox Code Playgroud)
where f是一个带有一个参数的函数,n是一个正整数.
例如,如果我将square定义为:
def square(x):
return x * x
Run Code Online (Sandbox Code Playgroud)
我打来电话
repeated(square, 2)(3)
Run Code Online (Sandbox Code Playgroud)
这将是3次,2次.
Joh*_*iss 22
应该这样做:
def repeated(f, n):
def rfun(p):
return reduce(lambda x, _: f(x), xrange(n), p)
return rfun
def square(x):
print "square(%d)" % x
return x * x
print repeated(square, 5)(3)
Run Code Online (Sandbox Code Playgroud)
输出:
square(3)
square(9)
square(81)
square(6561)
square(43046721)
1853020188851841
Run Code Online (Sandbox Code Playgroud)
还是没有lambda?
def repeated(f, n):
def rfun(p):
acc = p
for _ in xrange(n):
acc = f(acc)
return acc
return rfun
Run Code Online (Sandbox Code Playgroud)
使用reduce和lamba.从您的参数开始构建一个元组,然后是您要调用的所有函数:
>>> path = "/a/b/c/d/e/f"
>>> reduce(lambda val,func: func(val), (path,) + (os.path.dirname,) * 3)
"/a/b/c"
Run Code Online (Sandbox Code Playgroud)
像这样的东西吗?
def repeat(f, n):
if n==0:
return (lambda x: x)
return (lambda x: f (repeat(f, n-1)(x)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39751 次 |
| 最近记录: |