【问题标题】:How to call python function with optional parameters如何使用可选参数调用python函数
【发布时间】:2015-07-11 10:30:30
【问题描述】:

我有以下功能:

def create(self, name, page=5, opt1=False, opt2=False,
                        opt3=False,
                        opt4=False,
                        opt5=False,
                        opt6=False,
                        *parameters):

是否可以只分配一个可选参数和一些*参数?例如

create('some name', opt4=True, 1, 2, 3) # I need 1, 2, 3 to be assigned to *parameters

大多数时候,我不需要更改 opt1...opt6 的值,我只需要更改其中一个,并分配一些其他的*parameters。因此,如果我不想更改它们的默认值,我正在寻找一种避免设置 opt1...opt6 的方法。

【问题讨论】:

  • 如何使用 use 1 2 和 3,用户如何知道他们在做什么?
  • @PadraicCunningham 它们可以是任意数字列表。不一定是1, 2, 3。他们可能是34, 100, 12, 18
  • 我的意思是可选的 *parameters 将在您的代码中被视为可迭代,因此您可以创建另一个关键字 arg nums=None 并将可迭代作为参数

标签: python optional-parameters


【解决方案1】:

这肯定不好, 但你可能可以处理这个的变体

def create(name, page=5, opt1=False, opt2=False,
           opt3=False,
           opt4=False,
           opt5=False,
           opt6=False,
           *parameters):
    print(parameters)
    print(page)
    print(opt4)

myArgs = dict(zip(['page','opt1','opt2','opt3','opt4','opt5','opt6'],create.func_defaults))

myArgs['opt4']=True
create("MyName",**myArgs)

【讨论】:

    【解决方案2】:

    在 Python 3.x 中,尝试将 parameters 放在任何默认参数之前,例如 -

    def create(self, name , *parameters, page=5, opt1=False, 
                                      opt2=False,opt3=False,
                                      opt4=False,opt5=False,
                                      opt6=False):
        print(parameters)
        print(page)
        print(opt4)
    
    In [31]: create('C', 'some name', 1, 2, 3, opt4 = True)
    (1, 2, 3)
    5
    True
    

    请理解,使用此方法,您只能使用命名参数调用具有默认值的参数。


    对于 Python 2.x ,您可以尝试使用 *parameters 然后 **kwargs 作为默认参数 -

    >>> def create(self, name, *parameters, **kwargs):
    ...     kwargs.setdefault('opt4',False)  #You will need to do for all such parameters.
    ...     print(parameters)
    ...     print(kwargs['opt4'])
    ... 
    >>> create('C', 'some name', 1, 2, 3, opt4 = True)
    (1, 2, 3)
    True
    

    同样,设置 opt1...opt6page 等值的唯一方法是使用命名参数。

    【讨论】:

      猜你喜欢
      • 2016-08-23
      • 2012-04-09
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2010-11-07
      相关资源
      最近更新 更多