我正在创建一个套接字客户端,需要定义一个向服务器发送以下类型消息的函数:sometext,[name_1],[name_2],...,[name_n]
。实际上这个消息更复杂,但为了一个例子我简化了它。
其中:
...
- 表示name_2与姓氏之间的其余名称(以逗号分隔)我知道有*args
和**kwargs
,但在这种情况下如何正确使用str.format()
?我需要这样的东西:
def send_names(*args):
print('sometext,{*args},'.format(*args)) # as an example we just print
我知道这段代码不起作用,因为{*args}
在这里是非法的。
当我事先知道*args
的数量时,代码会起作用,就像在这里:
def send_names(*args):
print('sometext,{0},{1},{2}'.format(*args)) # as an example we just print
我错过了什么?
答案 0 :(得分:3)
您不能使用*args
或**kwargs
申请可变数量的广告位,不能。你必须根据长度自己创建插槽:
','.join(['{}'] * len(args)).format(*args)
然后,您可以根据需要将结果插入到另一个模板中。上述内容适用于通常由格式化插槽接受的任何类型的参数。
演示:
>>> args = ('foo', 'bar')
>>> ','.join(['{}'] * len(args)).format(*args)
'foo,bar'
>>> args = ('foo', 'bar', 'baz')
>>> ','.join(['{}'] * len(args)).format(*args)
'foo,bar,baz'
>>> args = (1, 2, 3)
>>> ','.join(['{}'] * len(args)).format(*args)
'1,2,3'
答案 1 :(得分:3)
您可以加入*args
来完成您想要的工作:
def send_names(*args):
print('sometext, {0}'.format(', '.join(args)))
send_names('message1', 'message2', 'message3')
结果:
sometext, message1, message2, message3
答案 2 :(得分:1)
我认为您应该根据需要避免使用.format
和', '.join
args。您没有提到为什么需要.format
问题中的字符串的任何具体原因。就像@Selcuk