random.md
1> **Источник:** https://python-all.ru/3.0/library/random.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `random` – Генерация псевдослучайных чисел89Этот модуль реализует генераторы псевдослучайных чисел для различных распределений.1011Для целых чисел – равномерный выбор из диапазона. Для последовательностей – равномерный выбор случайного элемента, функция для генерации случайной перестановки списка на месте и функция для случайной выборки без возвращения.1213На вещественной прямой есть функции для вычисления равномерного, нормального (гауссовского), логнормального, отрицательного экспоненциального, гамма и бета распределений. Для генерации распределений углов доступно распределение фон Мизеса.1415Почти все функции модуля зависят от базовой функции [`random()`](https://python-all.ru/3.0/library/random.html#random.random), которая генерирует случайное число с плавающей запятой, равномерно распределённое в полуоткрытом интервале \[0.0, 1.0). В Python в качестве основного генератора используется вихрь Мерсенна. Он генерирует числа с плавающей запятой точностью 53 бита и имеет период 2\*\*19937-1. Базовая реализация на C быстра и потокобезопасна. Вихрь Мерсенна – один из наиболее тщательно протестированных генераторов случайных чисел. Однако, будучи полностью детерминированным, он не подходит для всех целей и совершенно непригоден для криптографии.1617Функции, предоставляемые этим модулем, на самом деле являются привязанными методами скрытого экземпляра класса `random.Random`. Можно создать собственные экземпляры `Random`, чтобы получить генераторы, которые не разделяют состояние.1819Класс `Random` также можно наследовать, если требуется использовать другой базовый генератор собственной разработки: в этом случае нужно переопределить методы [`random()`](https://python-all.ru/3.0/library/random.html#random.random), [`seed()`](https://python-all.ru/3.0/library/random.html#random.seed), [`getstate()`](https://python-all.ru/3.0/library/random.html#random.getstate) и [`setstate()`](https://python-all.ru/3.0/library/random.html#random.setstate). При желании новый генератор может предоставлять метод [`getrandbits()`](https://python-all.ru/3.0/library/random.html#random.getrandbits) – это позволяет [`randrange()`](https://python-all.ru/3.0/library/random.html#random.randrange) выполнять выборку из диапазона произвольного размера.2021Функции учёта:2223#### `[random.seed]random.seed([x])`2425Initialize the basic random number generator. Optional argument *x* can be any [*hashable*](https://python-all.ru/3.0/glossary.html#term-hashable) object. If *x* is omitted or `None`, current system time is used; current system time is also used to initialize the generator when the module is first imported. If randomness sources are provided by the operating system, they are used instead of the system time (see the [`os.urandom()`](https://python-all.ru/3.0/library/os.html#os.urandom) function for details on availability).2627Если *x* не является `None` или целым числом, используется `hash(x)`. Если *x* – целое число, используется непосредственно *x*.2829#### `[random.getstate]random.getstate()`3031Возвращает объект, фиксирующий текущее внутреннее состояние генератора. Этот объект можно передать в3233[`setstate()`](https://python-all.ru/3.0/library/random.html#random.setstate)3435для восстановления состояния.3637#### `[random.setstate]random.setstate(state)`3839*state*4041должен быть получен из предыдущего вызова4243[`getstate()`](https://python-all.ru/3.0/library/random.html#random.getstate)4445, а4647[`setstate()`](https://python-all.ru/3.0/library/random.html#random.setstate)4849восстанавливает внутреннее состояние генератора до того, каким оно было на момент вызова5051[`setstate()`](https://python-all.ru/3.0/library/random.html#random.setstate)5253.5455#### `[random.jumpahead]random.jumpahead(n)`5657Изменяет внутреннее состояние на другое, которое, вероятно, находится далеко от текущего.5859*n*6061– неотрицательное целое число, используемое для перемешивания текущего вектора состояния. Это особенно полезно в многопоточных программах при использовании нескольких экземпляров класса6263`Random`6465: с помощью6667[`setstate()`](https://python-all.ru/3.0/library/random.html#random.setstate)6869или7071[`seed()`](https://python-all.ru/3.0/library/random.html#random.seed)7273можно привести все экземпляры к одному внутреннему состоянию, а затем с помощью7475[`jumpahead()`](https://python-all.ru/3.0/library/random.html#random.jumpahead)7677развести их состояния далеко друг от друга.7879#### `[random.getrandbits]random.getrandbits(k)`8081Возвращает целое число Python из8283*k*8485случайных битов. Этот метод предоставляется генератором MersenneTwister, и некоторые другие генераторы также могут реализовывать его как опциональную часть API. Когда он доступен,8687[`getrandbits()`](https://python-all.ru/3.0/library/random.html#random.getrandbits)8889позволяет9091[`randrange()`](https://python-all.ru/3.0/library/random.html#random.randrange)9293работать с произвольно большими диапазонами.9495Функции для целых чисел:9697#### `[random.randrange]random.randrange([start], stop[, step])`9899Возвращает случайно выбранный элемент из100101`range(start, stop, step)`102103. Это эквивалентно104105`choice(range(start, stop, step))`106107, но не создаёт объект range.108109#### `[random.randint]random.randint(a, b)`110111Возвращает случайное целое число112113*N*114115такое, что116117`a <= N <= b`118119.120121Функции для последовательностей:122123#### `[random.choice]random.choice(seq)`124125Возвращает случайный элемент из непустой последовательности126127*seq*128129. Если130131*seq*132133пуста, возбуждает134135[`IndexError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.IndexError)136137.138139#### `[random.shuffle]random.shuffle(x[, random])`140141Перемешивает последовательность *x* на месте. Необязательный аргумент *random* – функция без аргументов, возвращающая случайное число с плавающей запятой в \[0.0, 1.0); по умолчанию это функция [`random()`](https://python-all.ru/3.0/library/random.html#random.random).142143Обратите внимание, что даже для довольно малого `len(x)` общее число перестановок *x* больше периода большинства генераторов случайных чисел; это означает, что большинство перестановок длинной последовательности никогда не могут быть сгенерированы.144145#### `[random.sample]random.sample(population, k)`146147Возвращает список длины *k* из уникальных элементов, выбранных из последовательности population или множества. Используется для случайной выборки без возвращения.148149Возвращает новый список, содержащий элементы из population, не изменяя исходную population. Результирующий список упорядочен по порядку выбора, так что все подсписки также будут корректными случайными выборками. Это позволяет разделить победителей розыгрыша (выборку) на обладателей главного и второго призов (подсписки).150151Элементы population не обязаны быть [*хэшируемыми*](https://python-all.ru/3.0/glossary.html#term-hashable) или уникальными. Если population содержит повторения, то каждое вхождение является возможным элементом выборки.152153Чтобы выбрать выборку из диапазона целых чисел, используйте объект [`range()`](https://python-all.ru/3.0/library/functions.html#range) в качестве аргумента. Это особенно быстро и эффективно по памяти для выборки из большой популяции: `sample(range(10000000), 60)`.154155Следующие функции генерируют конкретные вещественные распределения. Имена параметров функций соответствуют переменным в уравнении распределения, как принято в математической практике; большинство этих уравнений можно найти в любом учебнике по статистике.156157#### `[random.random]random.random()`158159Возвращает следующее случайное число с плавающей запятой в диапазоне \[0.0, 1.0).160161#### `[random.uniform]random.uniform(a, b)`162163Возвращает случайное число с плавающей запятой164165*N*166167такое, что168169`a <= N <= b`170171для172173`a <= b`174175и176177`b <= N <= a`178179для180181`b < a`182183.184185#### `[random.triangular]random.triangular(low, high, mode)`186187Возвращает случайное число с плавающей запятой188189*N*190191такое, что192193`low <= N <= high`194195и с заданной196197*mode*198199между этими границами. Границы200201*low*202203и204205*high*206207по умолчанию равны нулю и единице. Аргумент208209*mode*210211по умолчанию равен середине между границами, что даёт симметричное распределение.212213#### `[random.betavariate]random.betavariate(alpha, beta)`214215Бета-распределение. Условия на параметры:216217`alpha > 0`218219и220221`beta > 0`222223. Возвращаемые значения находятся в диапазоне от 0 до 1.224225#### `[random.expovariate]random.expovariate(lambd)`226227Экспоненциальное распределение.228229*lambd*230231равно 1.0, делённой на желаемое среднее значение. (Параметр мог бы называться «lambda», но это зарезервированное слово в Python.) Возвращаемые значения находятся в диапазоне от 0 до положительной бесконечности.232233#### `[random.gammavariate]random.gammavariate(alpha, beta)`234235Гамма-распределение. (236237*Не*238239гамма-функция!) Условия на параметры:240241`alpha > 0`242243и244245`beta > 0`246247.248249#### `[random.gauss]random.gauss(mu, sigma)`250251Гауссово распределение.252253*mu*254255– это среднее, а256257*sigma*258259– это стандартное отклонение. Эта функция немного быстрее, чем260261[`normalvariate()`](https://python-all.ru/3.0/library/random.html#random.normalvariate)262263, определённая ниже.264265#### `[random.lognormvariate]random.lognormvariate(mu, sigma)`266267Логнормальное распределение. Если взять натуральный логарифм этого распределения, получится нормальное распределение со средним268269*mu*270271и стандартным отклонением272273*sigma*274275.276277*mu*278279может принимать любое значение, а280281*sigma*282283должна быть больше нуля.284285#### `[random.normalvariate]random.normalvariate(mu, sigma)`286287Нормальное распределение.288289*mu*290291– это среднее, а292293*sigma*294295– стандартное отклонение.296297#### `[random.vonmisesvariate]random.vonmisesvariate(mu, kappa)`298299*mu*300301– это средний угол, выраженный в радианах от 0 до 2\*302303*pi*304305, а306307*kappa*308309– параметр концентрации, который должен быть больше или равен нулю. Если310311*kappa*312313равен нулю, это распределение сводится к равномерному случайному углу в диапазоне от 0 до 2\*314315*pi*316317.318319#### `[random.paretovariate]random.paretovariate(alpha)`320321Распределение Парето.322323*alpha*324325– параметр формы.326327#### `[random.weibullvariate]random.weibullvariate(alpha, beta)`328329Распределение Вейбулла.330331*alpha*332333– параметр масштаба, а334335*beta*336337– параметр формы.338339Альтернативные генераторы:340341#### `[random.SystemRandom]class random.SystemRandom([seed])`342343Класс, использующий функцию344345[`os.urandom()`](https://python-all.ru/3.0/library/os.html#os.urandom)346347для генерации случайных чисел из источников, предоставляемых операционной системой. Доступен не на всех системах. Не опирается на состояние программного обеспечения, и последовательности невоспроизводимы. Соответственно, методы348349[`seed()`](https://python-all.ru/3.0/library/random.html#random.seed)350351и352353[`jumpahead()`](https://python-all.ru/3.0/library/random.html#random.jumpahead)354355не действуют и игнорируются. Методы356357[`getstate()`](https://python-all.ru/3.0/library/random.html#random.getstate)358359и360361[`setstate()`](https://python-all.ru/3.0/library/random.html#random.setstate)362363при вызове возбуждают364365[`NotImplementedError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.NotImplementedError)366367.368369Примеры базового использования:370371```python372>>> random.random() # Случайный float x, 0.0 <= x < 1.03730.37444887175646646374>>> random.uniform(1, 10) # Случайный float x, 1.0 <= x < 10.03751.1800146073117523376>>> random.randint(1, 10) # Целое число от 1 до 10 включительно3777378>>> random.randrange(0, 101, 2) # Чётное целое число от 0 до 10037926380>>> random.choice('abcdefghij') # Выбрать случайный элемент381'c'382383>>> items = [1, 2, 3, 4, 5, 6, 7]384>>> random.shuffle(items)385>>> items386[7, 3, 2, 5, 6, 4, 1]387388>>> random.sample([1, 2, 3, 4, 5], 3) # Выбрать 3 элемента389[4, 1, 5]390```391392> **См. также**393>394> M. Matsumoto и T. Nishimura, «Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator», ACM Transactions on Modeling and Computer Simulation, Том 8, № 1, Январь, стр. 3-30, 1998.395