python字符串命名_如何从python字符串中获取命名变量的名称

这篇博客探讨了在Python 2.7中优雅地提取`%`格式字符串映射键名称的问题。由于底层C实现不提供API,作者指出没有简单且完全准确的方法。文章提出了一种使用正则表达式的部分解决方案,能够处理常见用例,但无法覆盖所有复杂情况。博客还强调了解析逻辑的复杂性和对DRY原则的违反。
摘要由CSDN通过智能技术生成

为了回答这个问题,你需要定义“优雅”.有几个因素值得考虑:

>代码是否简短,易于记忆,易于编写和自我解释?

>它是否重用了基础逻辑(即遵循DRY原则)?

>它是否实现了完全相同的解析逻辑?

不幸的是,字符串的“%”格式是在stringobject.c中的C例程“PyString_Format”中实现的.此例程不提供允许访问格式字符串的已解析形式的API或挂钩.它只是在解析格式字符串时构建结果.因此,任何解决方案都需要从C例程复制解析逻辑.这意味着如果对格式规范进行了更改,则不会遵循DRY并公开任何解决方案.

PyString_Format中的解析算法包含一些复杂性,包括处理键名中的嵌套括号,因此无法使用正则表达式完全实现,也不能使用字符串“split()”.没有从PyString_Format复制C代码并将其转换为Python代码,我没有看到在任何情况下正确提取映射键名称的任何远程简单方法.

所以我的结论是没有“优雅”的方法来获取Python 2.7“%”格式字符串的映射键的名称.

以下代码使用正则表达式提供涵盖最常见用法的部分解决方案:

import re

class StringFormattingParser(object):

__matcher = re.compile(r'(?

@classmethod

def getKeyNames(klass, formatString):

return klass.__matcher.findall(formatString)

# Demonstration of use with some sample format strings

for value in [

'%(a)s and %(b)s are friends.',

'%%(nomatch)i',

'%%',

'Another %(matched)+4.5f%d%% example',

'(%(should_match(but does not))s',

]:

print StringFormattingParser.getKeyNames(value)

# Note the following prints out "really does match"!

print '%(should_match(but does not))s' % {'should_match(but does not)': 'really does match'}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值