擅长:python、mysql、java
<p>分解多个函数的公共代码的一个好方法是通过<a href="http://docs.python.org/2.7/reference/compound_stmts.html#function-definitions" rel="nofollow" title="decorators">decorators</a>。例如</p>
<pre><code>from functools import wraps
def takes_list(func):
@wraps(func)
def wrapper(arg):
if not isinstance(arg, list):
arg = [arg]
return func(arg)
return wrapper
@takes_list
def my_func(x):
"Does something with list x."
</code></pre>
<p>我应该注意到,对于像文件这样的情况,您不想妨碍Python的duck类型:进行检查<code>isinstance(arg, file)</code>有一个问题,即它不允许像<code>io.StringIO</code>这样的文件类型的东西。相反,检查<code>str</code>(或<code>basestring</code>),甚至让<code>open</code>为您检查,使用try except。在</p>
<p>但是,通常更好的做法是让调用者将他们喜欢的内容传递到函数中,如果函数无效则失败。在</p>