<p>如果我正确地理解了您的目标,那么最简单的方法是使用<code>**kwargs</code>“magic”和{a1},例如:</p>
<pre><code>def demo(maintain_offset=None, **config):
if maintain_offset is None: # if not supplied by 'real name'
maintain_offset = config.get('mo', 'baz') # check alias, fall back to default
print maintain_offset
</code></pre>
<p><em>(注意遵守<a href="http://www.python.org/dev/peps/pep-0008/" rel="nofollow noreferrer">style guide</a>)</em>。使用中:</p>
^{pr2}$
<p>如果不熟悉此语法,请参见<a href="https://stackoverflow.com/q/36901/3001761">What does ** (double star) and * (star) do for parameters?</a></p>
<hr/>
<p>对于更通用的方法,可以使用decorator语法用一组别名包装函数:</p>
<pre><code>import functools
def alias(aliases):
def decorator(func):
@functools.wraps(func)
def wrapper(**kwargs):
for name, alias in aliases.items():
if name not in kwargs and alias in kwargs:
kwargs[name] = kwargs[alias]
return func(**kwargs)
return wrapper
return decorator
</code></pre>
<p>使用中:</p>
<pre><code>>>> @alias({'maintain_offset': 'mo'})
def demo(maintain_offset='baz', **kwargs):
print maintain_offset
>>> demo(maintain_offset="foo")
foo
>>> demo(mo="bar")
bar
>>> demo()
baz
</code></pre>