当前位置: 首页 > 面试题库 >

条件传递参数的Pythonic解决方案

白才艺
2023-03-14
问题内容

我有一个带有两个可选参数的函数:

def func(a=0, b=10):
    return a+b

在我代码的其他地方,我正在做一些条件参数传递,例如:

if a and b:
   return func(a, b)
elif a:
   return func(a)
elif b:
   return func(b=b)
else:
   return func()

无论如何,是否可以简化此模式中的代码?

编辑

假设 不允许 我在内部实现默认参数逻辑func

我可能有几个功能,如funcfunc1func2并且func3都包含

a = a or 0
b = b or 10

陈述。

但是我正在调用这些功能来消除重复。(使用装饰器)


问题答案:

如果您不想更改任何内容,func那么明智的选择就是将参数的字典传递给函数:

>>> def func(a=0,b=10):
...  return a+b
...
>>> args = {'a':15,'b':15}
>>> func(**args)
30
>>> args={'a':15}
>>> func(**args)
25
>>> args={'b':6}
>>> func(**args)
6
>>> args = {}
>>> func(**args)
10

要不就:

>>>func(**{'a':7})
17


 类似资料:
  • 问题内容: 有没有更Python的方式来做到这一点? 问题答案: 您可以将它们添加到类似kwarg的列表中: if authenticate: connect_kwargs[‘password’] = “bar” connect_kwargs[‘otherarg’] = “zed” connect(**connect_kwargs) 当您可以将一组复杂的选项传递给函数时,这有时会很有帮助。在这种简

  • 本文向大家介绍解决Python传递中文参数的问题,包括了解决Python传递中文参数的问题的使用技巧和注意事项,需要的朋友参考一下 今天有个需要需要传递中文参数给URL 但是在GBK环境下的脚本传递GBK的参数老是给我报UNICODE的解码错误。烦的很。 所以我们果断选择用urlencode来处理中文, 由于国内外网站编码不同,国内是GBK的,国外是UTF8的。 这样我就得到了GBK的url编码,

  • 本文向大家介绍JavaScript函数参数的传递方式详解,包括了JavaScript函数参数的传递方式详解的使用技巧和注意事项,需要的朋友参考一下 JavaScript使用一个变量对象来追踪变量的生存期。基本类型值被直接保存在变量对象内;而引用类型值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。 基本类型值的传递 向参数传递基本类型值时,被传递的值会被复制给一个局部变量(即

  • 我想从'get codepage'传递2个参数到'mainpage',然后我出现了这个错误。这是我的getCodePage我传递参数的部分: 当我想将参数作为对象时,这是我的主页: 那么这里有一个错误:没有为类型“object”flutter error定义运算符“[]”

  • 本文向大家介绍shell传参并将参数传递给sql文件的方法,包括了shell传参并将参数传递给sql文件的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 调用代码:   sh /tmp/t.sh 20160808  以上这篇shell传参并将参数传递给sql文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍C#向线程中传递多个参数的解决方法(两种),包括了C#向线程中传递多个参数的解决方法(两种)的使用技巧和注意事项,需要的朋友参考一下 问题: 对于多线程编程,很多时候往往需要向线程中传递多个参数,而C#中的线程只接收1个object类型的参数(如下): 而现在需要往线程中传递多个参数,比如method方法想用单独的线程来跑 解决办法1:新建一个跑方法的类 然后新建一个该类实例,赋值之

  • 您可以将其他数据作为常规方法参数传递到后台任务。我再次使用下面的例子(希望没有让你厌恶): BackgroundJob.Enqueue(() => Console.WriteLine("Hello, {0}!", "world")); 在常规方法调用中,在执行后台作业期间, Console.WriteLine 方法将使用这些参数。为了参数传递进去,需要先序列化。 使用 了不起的 Newtonsof

  • 我尝试在Scala中实现一个StateMachine,但是我遇到了一个关于类型系统的问题,这让我相当困惑。在下面的代码中,我需要让guard函数接受StateMachine的预期子类的参数。不幸的是,由于FunctionN参数的类型参数是逆变的,我不确定如何完成此操作。