Python 3中的字符串替换?

时间:2016-03-13 18:27:59

标签: python-3.x

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

subs = 'world'
"Hello {[subs]}"
在Python 3中

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

4 个答案:

答案 0 :(得分:12)

您有两种格式化选项:使用C-printf样式格式字符串的旧python2样式@IBAction func buttonPressed(sender: AnyObject) { yourButton.superview.backgroundColor = UIColor(your values here) } 运算符,以及字符串的新python3样式%方法。由于向后移植,您可以在python2和python3中使用这两个选项。

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

%

请注意,在python中,"Hello %s" % subs "Hello %s%s" % (subs, '.') my_dict = {'placeholder_name': 'world', 'period': '.'} "Hello %(placeholder_name)s%(period)s" % my_dict 格式说明符接受任何类型的对象(整数,类实例等)作为输入,并将其转换为具有%s运算符的字符串,非常方便。关于在可替代输入对象上调用str()的{​​{1}}也是如此。只有当你想进行类型(例如:float)特定格式参数化(如%r)时,才需要其他格式说明符,如repr()

新的%f方法:

%.5f

当然format()也可能是"Hello {}".format(subs) "Hello {placeholder_name}".format(placeholder_name=subs) ,我只是使用了不同的名称来澄清事情。以下内容与上述解决方案相同:

placeholder_name

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

subs

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

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

答案 1 :(得分:9)

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

Python 3.6将引入第三个选项。详情请见:

PEP 0498 -- Literal String Interpolation

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

答案 2 :(得分:4)

%运算符将起作用,其语法很简单:

>>> subs = 'world'
>>> 'Hello %s' % subs
'Hello world'

字符串格式化的新语法允许其他选项,下面是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'

因此,使用较新的语法,您的问题的简单解决方案将是:

>>> subs = 'world'
>>> 'Hello {}'.format(subs)
'Hello world'

答案 3 :(得分:0)

您可以同时使用%和格式 - 不推荐使用%

subs = 'world'

print ("hello %s" % subs)
print ("hello {}".format(subs))
print ("hello {subs}".format(**locals()))

享受