Python 3中的字符串格式

时间:2012-12-19 04:53:32

标签: python python-3.x string

我在Python 2中这样做:

"(%d goals, $%d)" % (self.goals, self.penalties)

这是什么Python 3版本?

我尝试在线搜索示例,但我一直在使用Python 2版本。

4 个答案:

答案 0 :(得分:165)

以下是关于“新”格式语法的the docs。一个例子是:

"({:d} goals, ${:d})".format(self.goals, self.penalties)

如果goalspenalties都是整数(即它们的默认格式没问题),则可以缩短为:

"({} goals, ${})".format(self.goals, self.penalties)

由于参数是self的字段,因此还有一种方法可以使用单个参数两次(如@Burhan Khalid在评论中所述):

"({0.goals} goals, ${0.penalties})".format(self)

解释

  • {}表示下一个位置参数,默认格式为
  • {0}表示索引0的参数,默认格式为
  • {:d}是下一个位置参数,带十进制整数格式;
  • {0:d}是索引0的参数,带十进制整数格式。

在选择参数时可以做很多其他事情(使用命名参数而不是位置参数,访问字段等)和许多格式选项(填充数字,使用数千个分隔符,显示符号或不符号等) )。其他一些例子:

"({goals} goals, ${penalties})".format(goals=2, penalties=4)
"({goals} goals, ${penalties})".format(**self.__dict__)

"first goal: {0.goal_list[0]}".format(self)
"second goal: {.goal_list[1]}".format(self)

"conversion rate: {:.2f}".format(self.goals / self.shots) # '0.20'
"conversion rate: {:.2%}".format(self.goals / self.shots) # '20.45%'
"conversion rate: {:.0%}".format(self.goals / self.shots) # '20%'

"self: {!s}".format(self) # 'Player: Bob'
"self: {!r}".format(self) # '<__main__.Player instance at 0x00BF7260>'

"games: {:>3}".format(player1.games)  # 'games: 123'
"games: {:>3}".format(player2.games)  # 'games:   4'
"games: {:0>3}".format(player2.games) # 'games: 004'

注意:正如其他人所指出的那样,新格式并不能取代前者,Python 3和Python 2的新版本都可以使用。有些人可能会说这是一个偏好问题,但恕我直言,新版本比旧版更具表现力,并且应该在编写新代码时使用(当然,除非它针对较旧的环境)。

答案 1 :(得分:60)

Python 3.6现在支持使用PEP 498的简写文字字符串插值。对于您的用例,新语法只是:

String greaterOrEqual = TextUtils.htmlEncode(">=");
String smaller = TextUtils.htmlEncode("<");

String descricao = TextUtils.htmlEncode(">= 0");
if (descricao.contains(greaterOrEqual) ){

        descricao = descricao.replace(greaterOrEqual,smaller);
        listaElementosFiltro.get(i).setDescricao(Html.fromHtml(descricao))};

这类似于之前的f"({self.goals} goals, ${self.penalties})" 标准,但让人轻松做事like

.format

答案 2 :(得分:12)

该行在Python 3中按原样运行。

>>> sys.version
'3.2 (r32:88445, Oct 20 2012, 14:09:29) \n[GCC 4.5.2]'
>>> "(%d goals, $%d)" % (self.goals, self.penalties)
'(1 goals, $2)'

答案 3 :(得分:2)

我喜欢这种方法

my_hash = {}
my_hash["goals"] = 3 #to show number
my_hash["penalties"] = "5" #to show string
print("I scored %(goals)d goals and took %(penalties)s penalties" % my_hash)

请注意附加的d和s分别为括号。

输出将是:

I scored 3 goals and took 5 penalties