簡體   English   中英

如何將可變數量的參數格式化為字符串?

[英]python - How to format variable number of arguments into a string?

我們知道格式化一個參數可以使用字符串中的一個 %s來完成:

>>> "Hello %s" % "world"
'Hello world'

對於兩個參數,我們可以使用兩個%s (duh!):

>>> "Hello %s, %s" % ("John", "Joe")
'Hello John, Joe'

那么,如何格式化可變數量的參數而不必在基本字符串中明確定義一些%s等於要格式化的參數數量 如果這樣的事情存在,那將是非常酷的:

>>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary")
Hello JohnJoeMary
>>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary", "Rick", "Sophie")
Hello JohnJoeMaryRickSophie

這是否可能,或者我唯一能做的就是做一些事情:

>>> my_args = ["John", "Joe", "Mary"]
>>> my_str = "Hello " + ("".join(["%s"] * len(my_args)))
>>> my_str % tuple(my_args)
"Hello JohnJoeMary"

注意:我需要使用%s字符串格式化運算符。

更新

它需要與%s一起使用,因為來自另一個庫的函數使用該運算符格式化我的字符串,因為我傳遞了未格式化的字符串和args來格式化它,但它實際上在args之前進行了一些檢查和更正(如果需要)進行格式化。

所以我需要稱之為:

>>> function_in_library("Hello <cool_operator_here>", ["John", "Joe", "Mary"])
"Hello JohnJoeMary"

謝謝你的幫助!

您將在列表中使用str.join() 而不使用字符串格式,然后插入結果

"Hello %s" % ', '.join(my_args)

演示:

>>> my_args = ["foo", "bar", "baz"]
>>> "Hello %s" % ', '.join(my_args)
'Hello foo, bar, baz'

如果您的某些參數還不是字符串,請使用列表推導:

>>> my_args = ["foo", "bar", 42]
>>> "Hello %s" % ', '.join([str(e) for e in my_args])
'Hello foo, bar, 42'

或使用map(str, ...)

>>> "Hello %s" % ', '.join(map(str, my_args))
'Hello foo, bar, 42'

你對你的功能做同樣的事情:

function_in_library("Hello %s", ', '.join(my_args))

如果你是,你不能用一個(而任意)的限制使join的插值參數列表,使用join創建格式化字符串,而不是:

function_in_library("Hello %s" % ', '.join(['%s'] * len(my_args)), my_args)

暫無
暫無

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

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