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:更改现有函数参数的默认值?的主要内容,如果未能解决你的问题,请参考以下文章

Python参数类型

python——函数参数的传递

python07_函数

python函数

Python:函数基础

python函数部分----函数初识