Py学习  »  Python

Python-函数的可选参数

Martin • 5 年前 • 1661 次点击  

假设我要构建一个函数,它要么添加两个数字 a b ,或减去它们并加上第三个数字 c d . 我打算指定两个操作中的哪一个将由参数执行 sum ;如果这是 True ,执行第一个操作,如果 False ,然后执行第二个操作。我会这样写:

def f(a, b, c, d, sum=True):
    if sum: return a+b
    else: return a-b+c-d

f(1,2,3,4) 回报 3 ,而 f(1,2,3,4,sum=False) 回报 -2 c类 只有在 sum=False . 我该怎么做?我试过设置

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53847
 
1661 次点击  
文章 [ 4 ]  |  最新文章 5 年前
Bonfire
Reply   •   1 楼
Bonfire    5 年前

def f(a, b, c=None, d=None, sum=True):
  if sum: return a + b
  else: return a - b + c - d

但是,您可以进一步简化为:

def f(a, b, c=0, d=0):
  return a - b + c - d

sum 是真是假。

Carlos Bettin
Reply   •   2 楼
Carlos Bettin    5 年前

这解决了您的问题:

def f(a, b, c=0, d=0, sum=True):
    if sum: return a+b
    else: return a-b+c-d
Masklinn
Reply   •   3 楼
Masklinn    5 年前

其他人已经给出了你可以做到的方法,但在更基本的层面上,我会问为什么这甚至是相同的方法?在我看来,这里有两种不同的方法,fúsum和f(或其他),一个取两个参数,另一个取4。

或者如果这是一个更复杂的操作,而c和d只是附加的参数/属性,则可以将它们默认为空值,例如,对于加法,只需将它们默认为0:

def f(a, b, c=0, d=0)

a+b-0+0 如果不提供这些参数,则不会执行任何操作,结果将与a+b相同,甚至不需要条件或魔法标志。 很抱歉错过了第二个案子 - 把它误读为+

jfaccioni
Reply   •   4 楼
jfaccioni    5 年前

使用默认值 None

def f(a, b, c=None, d=None, sum=True):
    if sum:
        return a+b
    else: 
        return a-b+c-d

这还允许您将错误检查逻辑添加到函数中-当sum为False时检查c和d是否存在:

def f(a, b, c=None, d=None, sum=True):
    if sum: 
        return a+b
    else: 
        if None in (c, d):
            raise TypeError('f requires c and d args with parameter sum=False')
        return a-b+c-d