【发布时间】:2010-10-10 22:08:05
【问题描述】:
我有一个 Perl 函数,它接受一个时间戳并返回未更改的时间戳(如果它以前从未见过),否则它会附加一些字母以使其唯一:
sub uniqify($) {
my $timestamp = shift;
state $last_ts = -1;
state $next_letter = 'A';
if ($timestamp == $last_ts) {
$timestamp .= $next_letter++;
} else {
$last_ts = $timestamp;
$next_letter = 'A';
}
return $timestamp;
}
因此,如果您调用它四次,使用值 1、1、1 和 2,它将返回 1,然后是 1A,然后是 1B,然后是 2。
注意:它只会以不断增加的时间戳被调用,因此它不需要调用它见过的每一个,只需调用最后一个。
现在我需要把这个函数翻译成 Python。我了解到我可以用全局变量(糟糕!)替换“状态”变量,或者将它们作为属性附加到函数中,但这些都不是特别优雅。
另外,Python 没有类似 Perl 的神奇自动增量,如果你“++”一个值为“A”的变量,它变成“B”——或者如果它是“Z”,它变成“AA” ”。所以这也是一个曲线球。
我正在拼凑一个解决方案,但它真的很丑陋且难以阅读。从 Perl 翻译到 Python 应该会产生相反的效果,对吧? :) 所以我将此作为对 SO 用户的挑战。你能把它变成一个优雅的 Python 函数吗?
【问题讨论】:
-
因为没有 perl 的字符串增量特性而抨击 Python 是不公平的。但令人失望的是,还没有人敢于以蟒蛇的方式来应对挑战。如果 Chris J 使用的是函数属性,我觉得函数属性并不那么令人讨厌。
-
在 perl 的自动增量中,'AZ' 之后是什么? 'AAA'??
-
我不知道这个问题的目的是什么,除了诱使 Python 人抨击 Perl,反之亦然。除此以外,这里还有实际要求吗?
-
我不是在抨击。我是在陈述事实。我有一个真实的、真实的 Perl 脚本,恰好使用了这个 Perl 功能。现在我将它移植到 Python。 Python 没有这个特性。就是那样子。如果我不喜欢 Python,我一开始就不会移植脚本。