Мне нравится подход, который выглядит так:
base64chars = list(chars('AZ', 'az', '09', '++', '//'))
Это, безусловно, может быть реализовано с большим комфортом, но это быстро, легко и очень читабельно.
Python 3
Версия генератора:
def chars(*args):
for a in args:
for i in range(ord(a[0]), ord(a[1])+1):
yield chr(i)
Или, если вам нравятся списки:
def chars(*args):
return [chr(i) for a in args for i in range(ord(a[0]), ord(a[1])+1)]
Первый урожай:
print(chars('ĀĈ'))
<generator object chars at 0x7efcb4e72308>
print(list(chars('ĀĈ')))
['Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ']
в то время как второй дает:
print(chars('ĀĈ'))
['Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ']
Это действительно удобно:
base64chars = list(chars('AZ', 'az', '09', '++', '//'))
for a in base64chars:
print(repr(a),end='')
print('')
for a in base64chars:
print(repr(a),end=' ')
* * 1 022 * 1023 выходов *
'A''B''C''D''E''F''G''H''I''J''K''L''M''N''O''P''Q''R''S''T''U''V''W''X''Y''Z''a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''s''t''u''v''w''x''y''z''0''1''2''3''4''5''6''7''8''9''+''/'
'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' '+' '/'
Почему list()
? Без base64chars
может стать генератором (в зависимости от выбранной вами реализации) и, следовательно, может использоваться только в самом первом цикле.
Python 2
Подобное может быть заархивировано с помощью Python 2. Но это гораздо сложнее, если вы также хотите поддерживать Unicode. Чтобы побудить вас прекратить использовать Python 2 в пользу Python 3, я не пытаюсь представить здесь решение Python 2;)
Старайтесь избегать Python 2 сегодня для новых проектов. Также попробуйте сначала портировать старые проекты на Python 3, прежде чем расширять их - в конечном итоге это будет стоить усилий!
Правильная обработка Unicode в Python 2 чрезвычайно сложна, и почти невозможно добавить поддержку Unicode в проекты Python 2, если эта поддержка не была встроена с самого начала.
Подсказки, как перенести это в Python 2:
- Используйте
xrange
вместо range
- Создайте 2-ую функцию (
unicodes
?) Для обработки Unicode:
- Используйте
unichr
вместо chr
для возврата unicode
вместо str
- Никогда не забывайте подавать
unicode
строки как args
, чтобы ord
и индекс массива работали правильно