擅长:python、mysql、java
<p>在python中,函数本身是第一类对象,可以作为参数传递。可以在外部定义基函数。你知道吗</p>
<pre><code>def my_f(x):
return x**2+3
def my_functor(f, x, iterations):
for i in xrange(iterations):
x = f(x)
return x
print my_functor(my_f, -1, 20)
</code></pre>
<p>也许您可以找到一种更为隐式的方法,通过使用修饰符来定义同一个函子。你知道吗</p>
<pre><code>def iterated(fn):
"""
A decorator to make a function iterate over its outputs.
"""
def iterated_func(*args, **kwargs):
x = args[0]
iterations = args[1]
for i in xrange(iterations):
x = fn(x)
return x
return iterated_func
@iterated
def my_g(x):
return x**2+3
</code></pre>
<p>在这种情况下,<code>my_g(3,1)==my_f(3)</code>将计算为<code>True</code>。也就是说,通过在您定义的函数上添加decorator <code>@iterated</code>,您可以更改它的行为以获得作为参数的迭代次数。你知道吗</p>