所以我以前做过,对于这样一个看似简单的任务来说,这是一个令人惊讶的丑陋代码。在
目标是将任何不可打印字符转换为(点)。出于我的目的,“printable”确实排除了string.printable
(新行、制表符等)中的最后几个字符。这是用来打印旧的MS-DOS调试“十六进制转储”格式。。。或者类似的内容(额外的空白会破坏预期的转储布局)。在
我知道我可以使用string.translate()
,要使用它,我需要一个翻译表。所以我用string.maketrans()
来表示。我能想到的最好办法是:
filter = string.maketrans(
string.translate(string.maketrans('',''),
string.maketrans('',''),string.printable[:-5]),
'.'*len(string.translate(string.maketrans('',''),
string.maketrans('',''),string.printable[:-5])))
。。。这是一个难以阅读的混乱(虽然它确实有用)。在
从那里你可以调用use,比如:
^{pr2}$。。。要快乐。(只要你不看引擎盖下面)。在
现在,如果我把这个可怕的表达式分解成单独的语句,就更易读了:
ascii = string.maketrans('','') # The whole ASCII character set
nonprintable = string.translate(ascii, ascii, string.printable[:-5]) # Optional delchars argument
filter = string.maketrans(nonprintable, '.' * len(nonprintable))
为了易读性而这么做是很有诱惑力的。在
然而,我一直在想,必须有一个更优雅的方式来表达这一点!在
对于实际的代码高尔夫,我想你应该避免字符串.maketrans完全
或者
^{pr2}$这里最广泛的用法是“ascii”,但你明白了吗
如果我在打高尔夫球,可能会用这样的方法:
^{pr2}$下面是另一种使用列表理解的方法:
相关问题 更多 >
编程相关推荐