调用另一个函数并可选择保留默认参数

itz*_*tzy 13 python

我有一个带有一个可选参数的函数,如下所示:

def funA(x, a, b=1):
   return a+b*x
Run Code Online (Sandbox Code Playgroud)

我想编写一个调用的新函数,funA并且还有一个可选参数,但是如果没有传递参数,我想保留默认值funA.

我在想这样的事情:

def funB(x, a, b=None):
   if b:
     return funA(x, a, b)
   else:
     return funA(x, a)
Run Code Online (Sandbox Code Playgroud)

有更多的pythonic方式吗?

Lea*_*rtS 16

我会替换if bif b is not None,所以如果你传递b=0(或任何其他"虚假"值)作为参数funB将传递给它funA.

除此之外,它对我来说似乎相当pythonic:清晰明确.(虽然可能有点无用,取决于你想要做什么!)

一种更加神秘的方式依赖于funB使用正确的关键字参数调用(例如funB(3, 2, b=4):

def funB(x, a, **kwargs):
    return funA(x, a, **kwargs)
Run Code Online (Sandbox Code Playgroud)

  • 神秘的方式是向后退一步.更难阅读而没有功能上的增益. (5认同)
  • 是的,你是对的("神秘"很少表示积极的东西)并且它在功能上也不是真的相同,但仍然是有用的东西,在某些情况下避免了很多代码,可能不是这个.但是,如果我们有2,3,4 ...可选的默认参数,而不是1,它开始变得方便 (3认同)

k4p*_*ppa 8

def funA(x, a, b=1):
    return a+b*x

def funB(x, a, b=1):     
   return funA(x, a, b)
Run Code Online (Sandbox Code Playgroud)

设为默认值b=1in funB(),然后始终将其传递给funA()

  • 啊,对不起,我在这个问题上并不清楚:我不知道`funA`的默认参数是什么.(它的代码保存在其他可能改变的地方.) (2认同)
  • 我会使`funB`独立于`A`使用的实际默认值.理想情况下,如果`funA`选择不同的默认值,您不想更改`funB`. (2认同)