Python 3 中的字符串替换?

新手上路,请多包涵

我正在尝试做这样的事情:

 subs = 'world'
"Hello {[subs]}"

在 Python 3 中。

我不太明白语法(来自 Ruby/PHP)。我错过了什么吗?我认为文档中的 % 运算符已弃用 Python 2.x。

原文由 cjm2671 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 550
2 个回答

您有两个三个格式选项:

  • 旧的 python2 样式 % 与 C-printf 样式格式字符串一起使用的运算符
  • 新的python3风格 format() 字符串的方法。由于向后移植,您可以在 python2 和 python3 中使用此选项。
  • 更新的 python 3.6+ f-strings 没有向后移植到 python2:这些允许您在字符串文字中指定表达式

% 接受 C-printf 样式格式字符串的格式化程序:

 "Hello %s" % subs
"Hello %s%s" % (subs, '.')
my_dict = {'placeholder_name': 'world', 'period': '.'}
"Hello %(placeholder_name)s%(period)s" % my_dict

请注意,在 python 中, %s 格式说明符接受任何类型的对象(整数、类实例等)作为输入,并使用非常方便的 str() 运算符将其转换为字符串。 --- 在可替代输入对象上调用 repr() %r 如此。您需要其他格式说明符,例如 %f 仅当您想要执行类型(例如:float)特定格式参数化(例如 %.5f )时。

format() 方法:

 "Hello {}".format(subs)
"Hello {placeholder_name}".format(placeholder_name=subs)

当然 placeholder_name 也可以是 subs ,我只是用了一个不同的名字来澄清事情。以下将像上面的解决方案一样工作:

 "Hello {subs}".format(subs=subs)

在 python 中,位置参数也可以从列表或元组传递给函数调用,如果您想利用语言的更多动态特性,关键字参数也可以从字典传递:

 my_tuple = ('world', '.')
"Hello {}{}".format(*my_tuple)
my_dict = {'subs': 'world', 'period': '.'}
"Hello {subs}{period}".format(**my_dict)

我们可以通过参数化格式字符串来使事情复杂化,查看 format() 方法的文档以了解更多信息。

如果您有多个要替换的东西,那么我强烈建议使用命名占位符(使用关键字 args format() )而不是摆弄参数索引,因为它通常会使代码更容易阅读。如果有多个东西可以替代那么它也可以减少错误的发生。

python 3.6+ f-strings:

 >>> x=5
>>> y=6
>>> f'woof {x*y} meow'
'woof 30 meow'

原文由 pasztorpisti 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如其他人已经指出的那样,目前有两种方法可以在 Python 中进行字符串格式化。

Python 3.6 将引入第三种选择。详细信息可以在这里找到:

PEP 0498 – 文字字符串插值

>>> name = 'Fred'
>>> f'He said his name is {name!r}.'
"He said his name is 'Fred'."

原文由 Felix 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进