我对python中的字符串格式化表达式存在疑问:
字符串格式表达式的一般语法是
%[keyname][flags][width][.precision]typecode
我对此有一些疑问,这些是:
例如:
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)
它也显示错误。为什么呢?
答案 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()
调用的关键字参数提供。