8
message = "hello %s , how are you %s, welcome %s"%("john","john","john")

避免指定“约翰”3次而是指定一个短语的最pythonic方法是什么。

4

4 回答 4

24

我不会使用%格式化,.format有很多优点。%最初计划通过替换它来删除格式化,尽管显然这.format实际上并没有发生。

用于内置字符串格式化操作的新系统替换了%字符串格式化操作符。(但是,%仍然支持该运算符;它将在 Python 3.1 中弃用,并在以后从该语言中删除。)阅读PEP 3101以获取完整的独家新闻。

>>> "hello {name}, how are you {name}, welcome {name}".format(name='john')
'hello john, how are you john, welcome john'

我更喜欢第一种方式,因为它是明确的,但这.format是优于%格式化的原因

>>> "hello {0}, how are you {0}, welcome {0}".format('john')
'hello john, how are you john, welcome john'
于 2012-08-12T10:57:08.277 回答
11
"hello %(name)s , how are you %(name)s, welcome %(name)s" % {"name": "john"}
'hello john, how are you john, welcome john'

这是不使用格式的另一种方法。

于 2012-08-12T11:05:12.427 回答
3

这也有效:

"hello %s , how are you %s, welcome %s"%tuple(["john"]*3)

甚至更短,没有显式类型转换:

"hello %s , how are you %s, welcome %s"%(("john",)*3)
于 2012-08-12T11:08:43.233 回答
1

99% 的可能性你应该使用 .format()

这不太可能,但如果你有一系列的问候,你可以试试这个:

>>> greetings = ["hello", "how are you", "welcome"]
>>> ", ".join(" ".join((greet, "John")) for greet in greetings)
'hello John, how are you John, welcome John'
于 2012-08-12T12:01:53.363 回答