У меня есть функция 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?