首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >丑陋的代码:有趣的评论?

丑陋的代码:有趣的评论?
EN

Stack Overflow用户
提问于 2009-11-23 01:38:55
回答 2查看 553关注 0票数 1

这是我正在开发的代码片段,所有的人都认为,这段代码永远看不到光明。在我将它合并到我的项目之前,我会重构它并清理它。

然而,它似乎是有效的,我碰巧在听阿尔洛格思里,当我在工作。

代码语言:javascript
复制
#!/usr/bin/env python
import re

expr = re.compile(r'\[[0-9][-0-9,[]*\]')
def range2list(s):
    '''Given [x-y,a,b-c] return: range(x,y) + [a] + range(b,c)
       Handle decrements and zero-filling if necessary.

    '''
    assert s.startswith('[') and s.endswith(']') and len(s) > 2
    results = []
    r = s[1:-1]  # extract from enclosing brackets
    for i in r.split(','):  # each p
        if '-' not in i:
            results.append(i)
            continue
        # Else: (it's a range
        t = i.split('-')
        if len(t) != 2:   # punt on degenerate expressions
            results.append(i)
            continue
        # Else:
        if len(t[0]) > 1 and t[0].startswith('0'):
            fmt = "%%0%sd" % len(t[0])  ## Handle zero fill
        else:
            fmt = "%s"
        try:
            l, u = int(t[0]), int(t[1])
        except ValueError:  # punt on stuff that can't be converted
            results.append(i) # remember i? There's a song about i.
            continue
        if l > u:
            step=-1
        else:
            step=1
        results.extend([fmt % x for x in range(l,u,step)])
    return results 

..。还有一个测试套件:

代码语言:javascript
复制
if __name__ == '__main__':
    import sys
    testcases = [ '[0-5]', '[1]', '[1,2,3]', '[1-3,01-3,9,9-7]',
                  '[01-20]', '[020-1]', '[a,b,c,9-]' ]
    for i in testcases:
        print 
        print  'range2list(%s)' % i
        print "\t" + ' '.join(range2list(i))

..。它产生:

代码语言:javascript
复制
range2list([0-5])
    0:1:2:3:4

range2list([1])
        1

range2list([1,2,3])
        1:2:3

range2list([1-3,01-3,9,9-7])
        1:2:01:02:9:9:8

range2list([01-20])
        01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:19

range2list([020-1])
        020:019:018:017:016:015:014:013:012:011:010:009:008:007:006:005:004:003:002

range2list([a,b,c,9-])
        a:b:c:9-

我真的不喜欢里面错综复杂的混乱(特别是在我写评论“,记得我,有首关于i .的歌”的时候。)

当我把它清理干净后,我会把它合并成一个扩展主机名范围模式的函数(ww020-040,091,099 sfar.mycorp.com).等等)。(实际上,这里显示的编译regexp是另一个函数的一部分,它提取.(用于展开的字符串的表达式)。

所以,我的问题是:

  • 如何清理这个烂摊子?
  • --你在源代码评论中看到的最有趣、最晦涩、最有趣的音乐引用是什么?
  • 有没有人写过这样的解析器/扩展器?用Python?还会有人用过这样的东西吗?值得提供separately?
  • What替代语法吗?{0:9,12,23,090:099}?而不是-?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-23 01:53:48

如果您可以切换当前的a-b语法(这可能会被负数搞糊涂!)对于a:b,Python的切片语法将为您完成解析--您将以元组(包括切片和标量)结束(例如,通过带有索引方法的假类):

代码语言:javascript
复制
>>> class x(object):
...   def __getitem__(self, x): return x
... 
>>> x()[2, 3:6, 4]
(2, slice(3, 6, None), 4)

您只需按顺序处理该元组,以生成所需的结果(通过依次添加或适当扩展以[]开头的列表)。

票数 4
EN

Stack Overflow用户

发布于 2009-11-23 04:32:57

我为这种格式的here发布了一个解析器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1780721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档