社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python-函数的可选参数

Martin • 5 年前 • 1515 次点击  

假设我要构建一个函数,它要么添加两个数字 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
 
1515 次点击  
文章 [ 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