什么是全局格式()函数意味着什么?

时间:2016-01-28 11:50:26

标签: python string-formatting

我熟悉python中的str.format()方法,但它与format()函数(global-builtin)的工作方式不同。

全球format()功能的目的是什么?

3 个答案:

答案 0 :(得分:8)

根据格式规范,format() function格式一个值

str.format() method解析模板,然后格式化各个值。每个{value_reference:format_spec}说明符基本上都应用于匹配值,使用format()函数format(referenced_value, format_spec)

换句话说,str.format()建立在format()函数之上。 str.format()运行完整Format String Syntax stringformat()对匹配的值进行操作,仅应用Format Specification Mini-Language

例如,在表达式

'The hex value of {0:d} is {0:02x}'.format(42)

模板字符串有两个模板 slots ,两者都格式化str.format()方法的相同参数。第一个插值format(42, 'd'),另一个format(42, '02x')的输出。注意,两种情况下的第二个参数是格式说明符,例如在模板占位符中的:冒号之后的所有内容。

如果只想格式化单个值,请使用format()函数,如果要将格式化的值放在较大的字符串中,请使用str.format()

在幕后,format()委托object.__format__方法让值本身解释格式规范。 str.format()直接调用该方法,但您不应该依赖此object.__format__是一个钩子,将来format()可能会对该钩子的结果应用更多处理,或者预先处理要传入的格式。这实际上是一个实现细节,只有你想要的才有意思为您的对象类型实现自己的格式化语言。

有关为该语言添加str.format()format()object.__format__挂钩的原始提案,请参阅PEP-3101 Advanced String Formatting

答案 1 :(得分:1)

要添加马丁的答案,请查看PEP3101提案:

  

每种Python类型都可以通过定义来控制其实例的格式       一个__format__方法。 __format__方法负责       解释格式说明符,格式化值,和       返回结果字符串。

     

新的全球内置功能'格式'简单地称这个特别       方法,类似于len()str()简称为各自的方法       特殊方法:

def format(value, format_spec):
    return value.__format__(format_spec)
     

使用"无"的值调用此函数是安全的。 (因为       "无" Python中的值是一个对象,可以有方法。)

     

几种内置类型,包括' str',' int',' float'和' object'       定义__format__方法。这意味着,如果你派生于任何一个       那些类型,你的班级将知道如何格式化自己。

More info here

答案 2 :(得分:1)

str.format()方法和Formatter类共享格式字符串的相同语法(尽管在Formatter的情况下,子类可以定义自己的格式字符串语法)。

格式字符串包含由大括号{}包围的“替换字段”。大括号中未包含的任何内容都被视为文本文本,它将不加改变地复制到输出中。如果您需要在文字文本中包含大括号字符,可以通过加倍来转义它:{{和}}。

替换字段的语法如下:

replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
arg_name          ::=  [identifier | integer]
attribute_name    ::=  identifier
element_index     ::=  integer | index_string
index_string      ::=  <any source character except "]"> +
conversion        ::=  "r" | "s"
format_spec       ::=  <described in the next section>

另请参阅格式规范迷你语言部分。

field_name本身以arg_name开头,arg_name是数字或关键字。如果它是一个数字,它引用一个位置参数,如果它是一个关键字,它引用一个命名关键字参数。如果格式字符串中的数字arg_names按顺序为0,1,2,...,它们都可以省略(不仅仅是一些),数字0,1,2,...将按顺序自动插入。由于arg_name不是引号分隔的,因此无法在格式字符串中指定任意字典键(例如,字符串&#39; 10&#39;: - ]和#39;)。 arg_name后面可以跟任意数量的索引或属性表达式。表达形式&#39; .name&#39;使用getattr()选择命名属性,而表达式为&#39; [index]&#39;使用 getitem ()进行索引查找。

在版本2.7中更改:位置参数说明符可以省略,因此&#39; {} {}&#39;相当于&#39; {0} {1}&#39;。

如Python文档中提到的那样