Модуль locale применяется для работы с культурной средой. В конкретной культурной среде могут использоваться свои правила для написания чисел, валют, времени и даты и т.п. Следующий пример выводит дату сначала в культурной среде «C», а затем на русском языке:
>import time, locale
>locale.setlocale(locale.LC_ALL, None)
>print time.strftime("%d %B %Y", time.localtime (time.time()))
>locale.setlocale(locale.LC_ALL, "ru_RU.KOI8–R")
>print time.strftime("%d %B %Y", time.localtime (time.time()))
В результате:
>18 November 2004
>18 Ноября 2004
При интернационализации программы важно не только предусмотреть возможность использования нескольких культурных сред, но и перевод сообщений и меню программы на соответствующий язык. Модуль >gettext
позволяет упростить этот процесс достаточно стандартным способом. Основные сообщения программы пишутся на английском языке. А переводы строк, отмеченных в программе специальным образом, даются в виде отдельных файлов, по одному на каждый язык (или культурную среду). Уточнить нюансы использования >gettext
можно по документации к Python.
Поддержка цикла разработки
Модули этого раздела помогают поддерживать документацию, производить регрессионное тестирование, отлаживать и профилировать программы на Python, а также обслуживают распространение готовых программ, создавая среду для конфигурирования и установки пакетов.
В качестве иллюстрации можно предположить, что создается модуль для вычисления простых чисел по алгоритму «решето Эратосфена». Модуль будет находиться в файле >Sieve.py
и состоять из одной функции >primes(N)
, которая в результате своей работы дает все простые (не имеющие натуральных делителей кроме себя и единицы) числа от >2
до >N
:
>import sets
>import math
>"""Модуль для вычисления простых чисел от 2 до N """
>def primes(N):
> """Возвращает все простые от 2 до N"""
> sieve = sets.Set(range(2, N))
> for i in range(2, math.sqrt(N)):
> if i in sieve:
> sieve -= sets.Set(range(2*i, N, i))
> return sieve
Модуль >pdb
предоставляет функции отладчика с интерфейсом — командной строкой. Сессия отладки вышеприведенного модуля могла бы быть такой:
>>>> import pdb
>>>> pdb.runcall(Sieve.primes, 100)
>> /home/rnd/workup/intuit–python/examples/Sieve.py(15)primes()
>-> sieve = sets.Set(range(2, N))
>(Pdb) l
>10 import sets
>11 import math
>12 """Модуль для вычисления простых чисел от 2 до N """
>13 def primes(N):
>14 """Возвращает все простые от 2 до N"""
>15 -> sieve = sets.Set(range(2, N))
>16 for i in range(2, int(math.sqrt(N))):
>17 if i in sieve:
>18 sieve -= sets.Set(range(2*i, N, i))
>19 return sieve
>20
>(Pdb) n
>> /home/rnd/workup/intuit–python/examples/Sieve.py(16)primes()
>-> for i in range(2, int(math.sqrt(N))):
>(Pdb) n
>> /home/rnd/workup/intuit–python/examples/Sieve.py(17)primes()
>-> if i in sieve:
>(Pdb) n
>> /home/rnd/workup/intuit–python/examples/Sieve.py(18)primes()
>-> sieve -= sets.Set(range(2*i, N, i))
>(Pdb) n
>> /home/rnd/workup/intuit–python/examples/Sieve.py(16)primes()
>-> for i in range(2, int(math.sqrt(N))):
>(Pdb) p sieve