Python 3中的字符串替换?

cjm*_*671 9 python-3.x

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

subs = 'world'
"Hello {[subs]}"
Run Code Online (Sandbox Code Playgroud)

在Python 3中.

我无法弄清楚语法(来自Ruby/PHP).我错过了什么吗?我认为文档中的%运算符是Python 2.x已弃用.

pas*_*sti 15

您有两种格式化选项:%使用C-printf样式格式字符串的旧python2样式运算符,以及字符串的新python3样式format()方法.由于向后移植,您可以在python2和python3中同时使用这两个选项.

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

"Hello %s" % subs
"Hello %s%s" % (subs, '.')
my_dict = {'placeholder_name': 'world', 'period': '.'}
"Hello %(placeholder_name)s%(period)s" % my_dict
Run Code Online (Sandbox Code Playgroud)

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

format()方法:

"Hello {}".format(subs)
"Hello {placeholder_name}".format(placeholder_name=subs)
Run Code Online (Sandbox Code Playgroud)

当然placeholder_name也可以subs,我只是用一个不同的名字来澄清事情.以下方法与上述解决方案一样:

"Hello {subs}".format(subs=subs)
Run Code Online (Sandbox Code Playgroud)

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

my_tuple = ('world', '.')
"Hello {}{}".format(*my_tuple)
my_dict = {'subs': 'world', 'period': '.'}
"Hello {subs}{period}".format(**my_dict)
Run Code Online (Sandbox Code Playgroud)

我们可以通过参数化格式字符串来复杂化,查看format()方法的文档以获取更多信息.

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


Fel*_*lix 12

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

Python 3.6将引入第三个选项.详细信息可以在这里找到:

PEP 0498 - 文字字符串插值

>>> name = 'Fred' 
>>> f'He said his name is {name!r}.'  
"He said his name is 'Fred'."
Run Code Online (Sandbox Code Playgroud)


小智 5

% 运算符可以工作,其语法很简单:

>>> subs = 'world'
>>> 'Hello %s' % subs
'Hello world'
Run Code Online (Sandbox Code Playgroud)

字符串格式化的新语法允许使用其他选项,下面是 python 文档中的一个片段,概述了使用较新的 str.format() 方法的基本方法:

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c')  # 2.7+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc')      # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' indices can be repeated
'abracadabra'
Run Code Online (Sandbox Code Playgroud)

因此,使用更新的语法,解决您的问题的一个简单方法是:

>>> subs = 'world'
>>> 'Hello {}'.format(subs)
'Hello world'
Run Code Online (Sandbox Code Playgroud)