我试图做这样的事情:Python 3中的字符串替换?
subs = 'world'
"Hello {[subs]}"
在Python 3
我不能完全弄清楚的语法(是否来自红宝石/ PHP)。我错过了什么吗?文档中的%操作符我认为是不推荐使用的Python 2.x。
我试图做这样的事情:Python 3中的字符串替换?
subs = 'world'
"Hello {[subs]}"
在Python 3
我不能完全弄清楚的语法(是否来自红宝石/ PHP)。我错过了什么吗?文档中的%操作符我认为是不推荐使用的Python 2.x。
您有格式两种选择:老python2风格%
运营商,与C-printf风格的作品格式化字符串,以及字符串的新python3风格format()
方法。由于backporting,你可以在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
注意,在蟒%s
格式说明接受任何类型的对象(整数,类的实例,等)作为输入,并将其转换与str()
运算符的字符串相当方便。 %r
对可替换输入对象调用repr()
也是如此。只有在需要输入(例如:float)特定格式参数(如%.5f
)时,您需要其他格式说明符,如%f
。
新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()
方法的文档的更多。
如果你有多种东西需要替换,那么我强烈建议使用指定的占位符(关键字参数为format()
)而不是摆弄参数索引,因为它通常会使代码更容易阅读。如果有多个东西需要替换,那么它也可以减少错误的发生。
@poke是的,我的信息是过时的。我更新我的答案。我很惊讶他们保持'%'格式。他们可能希望删除它以使语言语法更清晰一些,但我同意使用'%'格式化somtimes会导致更简单的格式字符串,并且很多开发人员更熟悉C样式格式。 – pasztorpisti
谢谢:)(顺便说一下,我完全和你说'str.format'是格式化字符串的优越方式;我只想指出百分比格式化并不是一种不好的方法) – poke
您可以同时使用%和格式 - 他们不被弃用
subs = 'world'
print ("hello %s" % subs)
print ("hello {}".format(subs))
print ("hello {subs}".format(**locals()))
享受
%运算符将工作,其语法很简单:
>>> subs = 'world'
>>> 'Hello %s' % subs
'Hello world'
字符串格式化新的语法允许额外的选项,继承人片段从python文档overviewing的基本途径使用新海峡。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'
与其他人一样已指出,有两种方法可以做到字符串在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'."
'潜艇=“world''' “你好{}” 格式(潜艇)' – jDo