Python type.function() 内字符串格式,可以吗?
Python type.function() within string format, is it possible?
是否可以从字符串格式中转换函数?
例如:
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)'
。为什么?
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)
属性;字符 (
、1
、0
和 )
在此处被视为属性名称的一部分。
您根本无法使用 Python 和字符串格式来完成您想做的事情。您可以使用 object.__format__()
方法支持自定义格式,它将在解析的对象上调用。所以使用:
'{alpha:formatspec} = 10'.format(**values)
将调用 alpha.__format__('formatspec')
;也许这是您可以在这里利用的东西。
是否可以从字符串格式中转换函数?
例如:
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)'
。为什么?
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)
属性;字符 (
、1
、0
和 )
在此处被视为属性名称的一部分。
您根本无法使用 Python 和字符串格式来完成您想做的事情。您可以使用 object.__format__()
方法支持自定义格式,它将在解析的对象上调用。所以使用:
'{alpha:formatspec} = 10'.format(**values)
将调用 alpha.__format__('formatspec')
;也许这是您可以在这里利用的东西。