不要理解字符串格式表达式

时间:2018-02-07 18:47:07

标签: python string-formatting

我对python中的字符串格式化表达式存在疑问:

字符串格式表达式的一般语法是

%[keyname][flags][width][.precision]typecode

我对此有一些疑问,这些是:

  1. keyname代表什么?
  2. 我们可以使用关键字参数而不是变量名和字典吗?
  3. 例如:

    x="%(z)d is equal to" %{"z":1}  # This expression gives me the required output.
    

    但是当我尝试这个时:

    x="%(z)d is equal to" %("z"=1)  # Causes error. I am getting confused with this.
    

    同样当我这样使用时:

    x="%(z)d is equal to" %dict("z"=1)
    

    它也显示错误。为什么呢?

1 个答案:

答案 0 :(得分:1)

Keyname 表示括号中的名称,例如z中的%(z)d。它被称为 keyname ,因为"z"是字典键,它将返回您想要在字符串中替换的值,在本例中为1

您会混淆两种指定字典的方法。

一个是大括号{ },其语法为{"z": 1}。您可以将键(此处为z)指定为常量或变量,并且变量可以包含任何可哈希值:元组符合条件,列出不要递归。

所以,正如你所知,这是有效的:

x = "%(z)d is equal to" % {"z":1} 

另一种方法是调用dict构造函数,其语法为dict(z=1)。但是这里的密钥必须是一个有效的Python标识符,因为在这种语法中,您将z作为关键字参数传递给dict()

在此语法中,第一个有效示例的等效内容为:

x ="%(z)d is equal to" % dict(z=1)

您在其他行上遇到错误,因为

  • ("z"=1)未指定dict,因为它既没有{...}也没有dict()构造函数调用。

  • dict("z"=1)将第一种语法(键是一个常量,使用{ }和冒号)混合使用第二种语法(键不能是常量:它需要成为标识符,您将其作为dict()调用的关键字参数提供。