【发布时间】:2018-05-24 03:37:35
【问题描述】:
问题“Is there a way to pass optional parameters to a function?”描述了如何使用默认关键字参数。
我有两个函数,其中一个调用另一个,我希望能够检测是否使用可选参数调用了外部函数:
def foo(x1, opt=None):
bar(opt)
def bar(opt=5):
print opt
if __name__ == '__main__':
foo(1) # Should print 5, actually prints None
foo(2, opt=3) # Does print 3
打印出来:
None
3
Foo() 可以用特殊的逻辑编写来检测是否传递了可选参数,但是有没有一种 Pythonic 的方式来传递一个可选参数,并且在不使用额外逻辑的情况下保留其可选性?
def foo2(x1, opt=None):
if opt is None:
bar()
else:
bar(opt)
默认值必须在内部函数中定义,因为它可以直接调用。我也可以为内部函数和外部函数定义相同的默认值,但是当默认值比整数更复杂时,这有点难看(违反 DRY)。
【问题讨论】:
-
我只是在纠结这个问题:如果您需要为内部和外部函数定义两个不同的默认值,您是否有设计问题?
-
这有帮助吗:docs.python.org/3/faq/…
-
我认为如果您通过改写代码以使用有意义的函数和参数名称而不是
foo、x1、opt等来解释上下文会有所帮助。我从字面上理解您的意思'正在询问,但如果不了解您要解决的实际问题,就很难提供意见。 -
@NPE,无意义的名称是重现问题的最简单方法。实际用例是内部函数在给定一些参数的情况下生成一个(非常长的)字符串,而外部函数在给定这些参数和文件名的情况下编写一个包含该输出的文件。更具体地说,字符串/文件的内容是 HTML5 文档。
标签: python