簡體   English   中英

Python-位置參數緊跟關鍵字參數

[英]Python- positional argument follows keyword argument

我有一個接受可變長度參數的函數,如下所述。 我把kwargs作為字典通過。 但是我不明白為什么我得到了錯誤。

class PanSearch(object):    
    otp_wait = 30

    def __init__(self, surname, dob, mobile_no, otp_host, **kwargs):
        kwargs.setdefault('browser', 'chromium')
        self.surname = surname
        self.dob = dob
        self.mobile_no = mobile_no
        self.otp_host = otp_host
        self.middle_name = kwargs.get('middle_name', None)
        self.first_name = kwargs.get('first_name', None)
        self.status = kwargs.get('status')
        self.gender = 'M' if kwargs.get('status') == 'P' else None

# instantiating the object
otp_host = 'abc.xyz.in'
input_kwargs = {'status': 'P', 'gender': 'M', 'browser': 'chromium'}
driver = PanSearch(surname='kulkarni', dob='13/10/1981', mobile_no='9769172006', otp_host, **input_kwargs)

File "pan_no.py", line 87
    driver = PanSearch(surname='kulkarni', dob='13/10/1981', mobile_no='9769172006', otp_host, **input_kwargs)
                                                                                        ^
SyntaxError: positional argument follows keyword argument

你需要改變

driver = PanSearch(surname='kulkarni', dob='13/10/1981', mobile_no='9769172006', otp_host, **input_kwargs)

driver = PanSearch('kulkarni', '13/10/1981', '9769172006', otp_host, **input_kwargs)

當我們使用(* keyword)時,它將收集剩余的position關鍵字,例如:

>>>def print_1(x,y,*z):
       print(x,y,z)
>>>print_1(1,2,3,4,5,6)
(1,2,(3,4,5,6,7))

如我們所見,(* argument)將提供的值放在一個元組中,並且不會收集關鍵字。如果要收集關鍵字argument,則可以使用(** argument)來實現,例如

  >>>def print_paramas(x,y,z=3,*pospar,**paramas):
            print(x,y,z)
            print(pospar)
            print(paramas)
    >>>print_paramas(1,2,4,445,8889,36,foo=5,br=46,sily=78)
    1 2 4
    (445, 8889, 36)
    {'foo': 5, 'br': 46, 'sily': 78}

您可以得到想要的東西,但是在使用(** augment)時,最好注意輸入,例如:

>>>print_paramas(x=1,y=2,z=4,445,8889,36,foo=5,br=46,sily=78)
SyntaxError: positional argument follows keyword argument

為什么? 由於(** argument)僅收集關鍵字參數,因此您定義的函數包含參數名稱(x,y,z),然后輸入參數(x =,y =,z =),這會導致(* *參數)和您的關鍵字argumet,因此,如果您想解決問題,建議您更改單詞

>>>driver = PanSearch(surname='kulkarni', dob='13/10/1981', mobile_no='9769172006', otp_host, **input_kwargs)

遵循順序

>>>driver = PanSearch('kulkarni', '13/10/1981','9769172006', otp_host, **input_kwargs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM