字符串格式的Python type.function(),有可能吗?

时间:2015-03-11 13:46:48

标签: python function types format

是否可以从字符串格式中转换函数?

例如:

print values.get('alpha').__mul__(10)

打印10.但是,如果你尝试类似的东西:

values = {'alpha': 1, 'beta': 12}
print "{alpha.__mul__(10)} = 10".format(**values)

你得到AttributeError: 'int' object has no attribute '__mul__(10)'。为什么呢?

1 个答案:

答案 0 :(得分:1)

string formatting中的字段名称​​不是 Python表达式。你不能这样对待它们。它们只支持与Python表达式相呼应的有限语法,但它们不是一回事。

具体来说,语法规则是:

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 "]"> +

因此字段名称仅支持属性查找(用作标识符)或订阅。

请注意,调用不受支持,.}之后的所有内容都被解释为属性名称。您的对象没有__mul__(10)属性;字符(10)在此处被视为属性名称的一部分。

你根本无法用Python和字符串格式做你想做的事情。您可以使用object.__format__()方法支持自定义格式,它将在已解析的对象上调用。所以使用:

'{alpha:formatspec} = 10'.format(**values)

将调用alpha.__format__('formatspec');也许这是你可以在这里使用的东西。