我有一个接受可变长度参数的函数,如下所述。我正在通过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
Run Code Online (Sandbox Code Playgroud)
你需要改变
driver = PanSearch(surname='kulkarni', dob='13/10/1981', mobile_no='9769172006', otp_host, **input_kwargs)
Run Code Online (Sandbox Code Playgroud)
至
driver = PanSearch('kulkarni', '13/10/1981', '9769172006', otp_host, **input_kwargs)
Run Code Online (Sandbox Code Playgroud)
小智 5
当我们使用 (*keyword) 时,它会收集剩余的位置关键字?例如:
>>>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))
Run Code Online (Sandbox Code Playgroud)
正如我们所看到的那样?*争论?把提供的值放在一个元组中?它不会收集关键字。如果你想收集关键字参数,你可以使用 (**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}
Run Code Online (Sandbox Code Playgroud)
你可以得到你想要的,但是当你使用(**augument)时,你最好注意你的输入,例如:
>>>print_paramas(x=1,y=2,z=4,445,8889,36,foo=5,br=46,sily=78)
SyntaxError: positional argument follows keyword argument
Run Code Online (Sandbox Code Playgroud)
为什么?因为 (**argument) 只收集关键字参数,你定义的函数包含参数名称 (x,y,z) ,而你输入参数 (x=,y=,z=),它会导致 (* *argument) 和你的关键字参数,所以如果你想解决你的问题,我建议你改变这个词
>>>driver = PanSearch(surname='kulkarni', dob='13/10/1981', mobile_no='9769172006', otp_host, **input_kwargs)
Run Code Online (Sandbox Code Playgroud)
遵循一个序列
>>>driver = PanSearch('kulkarni', '13/10/1981','9769172006', otp_host, **input_kwargs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20632 次 |
| 最近记录: |