2015-07-11 54 views
3

我有以下功能:如何調用Python函數使用可選參數

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,如果我不想更改它們的默認值。

+0

變種將如何使用使用1 2和3,如何在用戶知道他們做了什麼工作? –

+0

@PadraicCunningham它們可以是任意數字的任意列表。不一定是'1,2,3'。他們可能是'34,100,12,18'。 – Meysam

+0

我的意思是可選的*參數將被視爲代碼中的迭代器,因此您可以創建另一個關鍵字arg'nums = None',並將迭代作爲參數 –

回答

0

在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等方式將使用命名參數。

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) 
相關問題