如何在我的程序中使用单个** kwargs?我需要它在应用程序使用套接字设置端口号。我必须使用** kwargs,因为我也使用* args所以我不能添加" port = xxxx"在我的函数参数中。
def myFunction(*args, **kwargs):
...
socket.connect(("xx.xx.xx.xx", kwargs.values()))
...
myFunction("something", "other", port = xxxx)
临时我使用" kwargs.values()"设置端口号,但我认为这不是一个好主意。
答案 0 :(得分:2)
我不想要
kwargs
,我认为我不能在我的函数中添加port=xxxx
声明参数{I} {/ 1}
在Python 3中,可以在*args
之后定义参数:
*args
但是这会在Python 2中生成语法错误。
要使其适应您的代码,您可以使用:
>>> def func(*args, port):
... print(port)
... print(args)
...
>>> func('something', 'args', port='8000')
8000
('something', 'args')
#python3 only
def func(*args, port):
socket.connect(('xx.xx.xx.xx', port))
如您所见,您可以在>>> def func(*args, **kwargs):
... print(args)
... print(kwargs)
...
>>> func('something', 'other', port='8000')
('something', 'other')
{'port': '8000'}
字典
port
参数(如果已提供)
kwargs
使用以下方式调用:
def func(*args, **kwargs):
socket.connect(('xx.xx.xx.xx', kwargs['port']))
答案 1 :(得分:1)
当您使用**
时,您会收到字典。因此,您可以使用参数名称作为键来访问值。
def myFunction(*args, **kwargs):
...
socket.connect(("xx.xx.xx.xx", kwargs["port"]))
...
myFunction("something", "other", port = xxxx)
答案 2 :(得分:-1)
我必须使用** kwargs,因为我也使用* args所以我不能只添加" port = xxxx"在我的函数参数中。
你确定可以。
def myFunction(*args, port=None):
...
socket.connect(("xx.xx.xx.xx", port))
...
myFunction("something", "other", port = xxxx)
编辑:正如评论中所提到的,python2需要在显式参数之后定义的splat参数。因此,您将无法保留所需参数的顺序。另一种方法是定义函数,并假设使用者将传入名为port
的参数。在给出选择的情况下,我总是会选择明确命名的函数。
def myFunction(*args, **kwargs):
...
socket.connect(("xx.xx.xx.xx", port))
...
myFunction("something", "other", port = xxxx)
答案 3 :(得分:-3)
在你拿到它们时传递它:D
def myFunction(*args, **kwargs):
...
socket.connect("xx.xx.xx.xx", **kwargs)
...
myFunction("something", "other", port = xxxx)