python3的formatter_修改python的字符串Formatter

我想我在你的答案中看到的主要缺点是,它还没有处理原始的复合字段名称语法,例如0.name为’getattr’/’dot’操作符访问,0 [name]用于’getitem’检索指定在PEP 3101中.

这是一个适用于Python 2.7和3.3的版本.一个主要的实现差异是它覆盖了get_value()方法而不是get_field().

虽然它在如何检测get_value()方法中的调用方面有点hacky,但我认为它不会被认为是病态的. 😉

from __future__ import print_function

from string import Formatter

class CallFormatter(Formatter):

try: # deal with Py 2 & 3 difference

NUMERICS = (int, long)

except NameError:

NUMERICS = int

def get_value(self, key, args, kwargs):

if key.endswith('()'): # call?

return kwargs[key[:-2]]()

elif isinstance(key, self.NUMERICS):

return args[key]

else:

return kwargs[key]

if __name__ == '__main__':

fmt = CallFormatter()

def cabbages():

return 'hello'

d = dict(name='Fred')

class Thing(object):

def __init__(self, value):

self.attr = value

th = Thing(42)

print('d[name]:{d[name]}, th.attr:{th.attr}, '

'cabbages:{cabbages}'.format(**locals()))

print(fmt.format('d[name]:{d[name]}, th.attr:{th.attr}, '

'cabbages:{cabbages}, cabbages():{cabbages()}',

**locals()))

输出:

d[name]:Fred, th.attr:42, cabbages:

d[name]:Fred, th.attr:42, cabbages:,

cabbages():hello

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值