У меня есть функция 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. Я узнал, что могу заменить переменные "state" глобальными (yuck!) Или, возможно, привязать их к функции как атрибуты, но ни одна из них не является особенно элегантной.
Кроме того, у Python нет чего-то вроде автоинкремента магии Perl, где, если вы "++" переменная, значение которой "A", она становится "B", или если она "Z", она становится "AA". Так что Curveball тоже.
Я взламываю решение, но это действительно уродливо и трудно читать. Предполагается, что переход с Perl на Python будет иметь противоположный эффект, не так ли?:) Поэтому я предлагаю это как вызов пользователям SO. Можете ли вы сделать его элегантной функцией Python?