簡體   English   中英

Python中str.format()中的可變/任意數量的* args或** kwargs

[英]variadic / arbitrary number of *args or ** kwargs in str.format() in Python

我正在制作一個套接字客戶端,需要定義一個將以下類型的消息發送到服務器的函數: sometext,[name_1],[name_2],...,[name_n] 實際上,該消息更為復雜,但是為了舉例說明,我對其進行了簡化。

哪里:

  • ...代表name_2和姓氏_n之間的其余名稱(以逗號分隔)
  • 每次可以有任意數量的名稱

我知道有*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

我想念什么?

您不能使用*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'

您可以加入*args完成您想要的工作:

def send_names(*args):
    print('sometext, {0}'.format(', '.join(args)))

send_names('message1', 'message2', 'message3')

結果:

sometext, message1, message2, message3

我認為您應該避免使用.format而僅根據需要使用', '.join . .format args。 您沒有提到需要.format問題中的字符串的任何特定原因。 就像@Selcuk的解決方案一樣

暫無
暫無

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

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