Python 3:更改现有函数参数的默认值?
Posted
技术标签:
【中文标题】Python 3:更改现有函数参数的默认值?【英文标题】:Python 3: Change default values of existing function's parameters? 【发布时间】:2013-01-14 13:23:59 【问题描述】:我正在创建一个程序,该程序最终将有 500 次调用 print
函数,以及其他一些函数。这些函数中的每一个每次都会采用完全相同的参数,如下所示:
print(a, end='-', sep='.')
print(b, end='-', sep='.')
print(c, end='-', sep='.')
print(..., end='-', sep='.')
有没有办法改变print
函数参数的默认值?这样我就不必每次都输入end='-', sep='.'
?
【问题讨论】:
【参考方案1】:您可以使用functools.partial()
定义print()
的特殊版本,为其提供默认参数:
from functools import partial
myprint = partial(print, end='-', sep='.')
然后myprint()
将在您的代码中使用这些默认值:
myprint(a)
myprint(b)
myprint(c)
【讨论】:
这比我打算尝试的要好。我打算用__defaults__
做一些可怕的事情(显然内置函数中不存在......)
@MartijnPieters 谢谢,这正是我想要的。但是,这与定义一个新函数有什么不同,比如 def myprint(*args): print(*args, end='-', sep'.')
或像 Lee 建议的那样使用 lambda
?只是好奇,这在某种程度上更好吗?
@PatrikLippojoki:functools.partial
将您自己的包装函数定义为一行。更好的是它更短更清晰(在我看来);它表明您仍然只是调用print()
,但使用默认参数。【参考方案2】:
您还可以使用 lambda 函数:
my_print = lambda x: print(x, end='-', sep='-')
my_print(a)
my_print(b)
my_print(c)
【讨论】:
functools.partial 很好,但请注意它仅在 Python 2.5+ 中“成为”可用 Python 2.5 现在已经相当老了。 确实如此。我知道有几家供应商没有通过 RHEL5.4 对他们的产品进行任何认证,但仍然有 2.4 (!!)。 @Lee:是的。但是您可以并排安装较新的版本。别找借口。但我非常理解您的意思 :) Microsoft 会在类似情况下告诉您不支持旧系统。是的,有时可能很傲慢,但也很务实。 有了这个 lambda,my_print
只能接受一个参数,这使得函数变得不那么有趣了。当然,它违背了sep='-'
的目的。【参考方案3】:
还有一种方法允许多个参数并与 lambdas 一起使用:
my_print = lambda *args: print(*args, end="-", sep=".")
【讨论】:
以上是关于Python 3:更改现有函数参数的默认值?的主要内容,如果未能解决你的问题,请参考以下文章