Документация Python неофициальный перевод

conversion.md

106 строк · 6.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.6/c-api/conversion.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Преобразование строк и форматирование89Функции для преобразования чисел и форматированного вывода строк.1011**int `PyOS_snprintf`(char *\*str*, size\_t *size*, const char *\*format*, ...)**1213Вывод не более1415*size*1617байт в1819*str*2021в соответствии со строкой форматирования2223*format*2425и дополнительными аргументами. См. справочную страницу Unix2627*snprintf(2)*2829.3031**int `PyOS_vsnprintf`(char *\*str*, size\_t *size*, const char *\*format*, va\_list *va*)**3233Вывод не более3435*size*3637байт в3839*str*4041в соответствии со строкой форматирования4243*format*4445и списком переменных аргументов4647*va*4849. Справочная страница Unix5051*vsnprintf(2)*5253.5455[`PyOS_snprintf()`](https://python-all.ru/2.6/c-api/conversion.html#PyOS_snprintf) и [`PyOS_vsnprintf()`](https://python-all.ru/2.6/c-api/conversion.html#PyOS_vsnprintf) оборачивают функции стандартной библиотеки C `snprintf()` и `vsnprintf()`. Их цель – гарантировать согласованное поведение в граничных случаях, в котором стандартные функции C не гарантируют.5657Обёртки гарантируют, что *str\*\[\*size*-1\] всегда равен `'\0'` после возврата. Они никогда не записывают более *size* байт (включая завершающий `'\0'`) в str. Обе функции требуют, чтобы `str != NULL`, `size > 0` и `format != NULL`.5859Если на платформе нет `vsnprintf()` и размер буфера, необходимый для предотвращения усечения, превышает *size* более чем на 512 байт, Python аварийно завершается с *Py\_FatalError*.6061Возвращаемое значение (*rv*) для этих функций следует интерпретировать следующим образом:6263- Когда `0 <= rv < size`, преобразование вывода прошло успешно и в *str* было записано *rv* символов (исключая завершающий байт `'\0'` в *str\*\[\*rv*\]).64- Когда `rv >= size`, преобразование вывода было усечено и потребовался бы буфер размером `rv + 1` байт для успешного выполнения. *str\*\[\*size*-1\] равен `'\0'` в этом случае.65- Когда `rv < 0`, «произошло что-то плохое». *str\*\[\*size*-1\] равен `'\0'` и в этом случае, но остальная часть *str* не определена. Точная причина ошибки зависит от базовой платформы.6667Следующие функции предоставляют преобразование строк в числа, не зависящее от локали.6869**double `PyOS_ascii_strtod`(const char *\*nptr*, char *\*\*endptr*)**7071Преобразует строку в `double`. Эта функция ведёт себя как стандартная функция языка C `strtod()` в локали C. Она делает это без переключения текущей локали, так как это не было бы потокобезопасно.7273[`PyOS_ascii_strtod()`](https://python-all.ru/2.6/c-api/conversion.html#PyOS_ascii_strtod) обычно следует использовать для чтения конфигурационных файлов или других входных данных, не вводимых пользователем, которые должны быть независимы от локали.7475Новое в версии 2.4.7677Подробнее см. на странице руководства Unix *strtod(2)*.7879**char \* `PyOS_ascii_formatd`(char *\*buffer*, size\_t *buf\_len*, const char *\*format*, double *d*)**8081Преобразует `double` в строку, используя `'.'` в качестве десятичного разделителя. Параметр *format* – это строка формата в стиле `printf()`, задающая формат числа. Допустимые символы преобразования: `'e'`, `'E'`, `'f'`, `'F'`, `'g'` и `'G'`.8283Возвращаемое значение – указатель на *buffer* с преобразованной строкой или NULL, если преобразование не удалось.8485Новое в версии 2.4.8687**double `PyOS_ascii_atof`(const char *\*nptr*)**8889Преобразует строку в `double` способом, не зависящим от локали.9091Новое в версии 2.4.9293Подробнее см. на странице руководства Unix *atof(2)*.9495**char \* `PyOS_stricmp`(char *\*s1*, char *\*s2*)**9697Сравнение строк без учёта регистра. Функция работает почти идентично `strcmp()`, за исключением того, что игнорирует регистр.9899Новое в версии 2.6.100101**char \* `PyOS_strnicmp`(char *\*s1*, char *\*s2*, Py\_ssize\_t *size*)**102103Сравнение строк без учёта регистра. Функция работает почти идентично `strncmp()`, за исключением того, что игнорирует регистр.104105Новое в версии 2.6.106