Преобразование строк и форматирование¶String conversion and formatting
Функции для преобразования чисел и форматированного вывода строк.
-
int PyOS_snprintf(char *str, size_t size, const char *format, ...)¶
- Часть Stable ABI.
Выводит не более size байт в str в соответствии со строкой формата format и дополнительными аргументами. См. справочную страницу Unix snprintf(3).
-
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)¶
- Часть Stable ABI.
Выводит не более size байт в str в соответствии со строкой формата format и со списком переменных аргументов va. Справочная страница Unix vsnprintf(3).
PyOS_snprintf() и PyOS_vsnprintf() оборачивают функции стандартной библиотеки C
snprintf() и vsnprintf(). Их задача – гарантировать согласованное поведение в граничных случаях, чего не обеспечивают стандартные функции C.
Обёртки гарантируют, что str[size-1] всегда будет '\0' после возврата. Они никогда не записывают в str более size байт (включая завершающий '\0'). Обе функции требуют, чтобы str != NULL, size > 0, format != NULL
и size < INT_MAX. Обратите внимание, что это означает отсутствие эквивалента функции C99
n = snprintf(NULL, 0, ...), которая определяла бы необходимый размер буфера.
Возвращаемое значение (rv) для этих функций следует интерпретировать следующим образом:
Если
0 <= rv < size, преобразование выполнено успешно, и rv символов записано в str (за исключением завершающего байта'\0'по адресуstr[rv]).Если
rv >= size, преобразование было усечено, и для успешного выполнения потребовался бы буфер размеромrv + 1байт. В этом случаеstr[size-1]равно'\0'.Если
rv < 0, преобразование не удалось, иstr[size-1]также равно'\0'в этом случае, но остальная часть str не определена. Точная причина ошибки зависит от базовой платформы.
Следующие функции предоставляют преобразование строк в числа, не зависящее от локали.
-
unsigned long PyOS_strtoul(const char *str, char **ptr, int base)¶
- Часть Stable ABI.
Преобразует начальную часть строки из
strв значение unsigned long в соответствии с заданнымbase, которое должно быть между2и36включительно, или быть специальным значением0.Начальные пробелы и регистр символов игнорируются. Если
baseравно нулю, функция ищет начальные0b,0oили0x, чтобы определить основание. Если они отсутствуют, по умолчанию используется10. Основание должно быть 0 или от 2 до 36 (включительно). Еслиptrне равноNULL, оно будет содержать указатель на конец разбора.Если преобразованное значение выходит за пределы соответствующего типа возврата, возникает ошибка диапазона (
errnoустанавливается вERANGE) и возвращаетсяULONG_MAX. Если преобразование невозможно, возвращается0.См. также справочную страницу Unix strtoul(3).
Добавлено в версии 3.2.
-
long PyOS_strtol(const char *str, char **ptr, int base)¶
- Часть Stable ABI.
Преобразует начальную часть строки из
strв значение long в соответствии с заданнымbase, которое должно быть между2и36включительно, или быть специальным значением0.То же, что
PyOS_strtoul(), но возвращает значение long иLONG_MAXпри переполнении.См. также справочную страницу Unix strtol(3).
Добавлено в версии 3.2.
-
double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)¶
- Часть Stable ABI.
Преобразует строку
sв значение double, возбуждая исключение Python при неудаче. Множество допустимых строк соответствует строкам, принимаемым конструкторомfloat()в Python, за исключением того, чтоsне должно содержать начальных или конечных пробелов. Преобразование не зависит от текущей локали.Если
endptrравноNULL, преобразует всю строку. ВозбуждаетValueErrorи возвращает-1.0, если строка не является допустимым представлением числа с плавающей запятой.Если endptr не равно
NULL, преобразует максимально возможную часть строки и устанавливает*endptrтак, чтобы он указывал на первый непреобразованный символ. Если ни один начальный сегмент строки не является допустимым представлением числа с плавающей запятой, устанавливает*endptrтак, чтобы он указывал на начало строки, возбуждает ValueError и возвращает-1.0.Если
sпредставляет значение, слишком большое для хранения в float (например,"1e500"является такой строкой на многих платформах), то еслиoverflow_exceptionравноNULL, возвращаетPy_INFINITY(с соответствующим знаком) и не устанавливает никакого исключения. В противном случае,overflow_exceptionдолжен указывать на объект исключения Python; возбуждает это исключение и возвращает-1.0. В обоих случаях устанавливает*endptrтак, чтобы он указывал на первый символ после преобразованного значения.Если во время преобразования возникает любая другая ошибка (например, ошибка нехватки памяти), устанавливает соответствующее исключение Python и возвращает
-1.0.Добавлено в версии 3.1.
-
char *PyOS_double_to_string(double val, char format_code, int precision, int flags, int *ptype)¶
- Часть Stable ABI.
Преобразует double val в строку, используя переданные format_code, precision и flags.
format_code должен быть одним из
'e','E','f','F','g','G'или'r'. Для'r'переданная precision должна быть равна 0 и игнорируется. Код формата'r'задаёт стандартный форматrepr().flags может содержать ноль или более следующих значений, объединённых логическим ИЛИ:
-
Py_DTSF_SIGN¶
Всегда предваряет возвращаемую строку знаком, даже если val неотрицательно.
-
Py_DTSF_ADD_DOT_0¶
Гарантирует, что возвращаемая строка не будет выглядеть как целое число.
-
Py_DTSF_ALT¶
Применить альтернативные правила форматирования. Подробнее см. документацию по спецификатору
PyOS_snprintf()'#'.
-
Py_DTSF_NO_NEG_0¶
Отрицательный ноль преобразуется в положительный ноль.
Добавлено в версии 3.12.
Если ptype не равен
NULL, то значение, на которое он указывает, будет установлено в одну из следующих констант в зависимости от типа val:*ptype
тип val
-
Py_DTST_FINITE¶
конечное число
-
Py_DTST_INFINITE¶
бесконечное число
-
Py_DTST_NAN¶
не число
Возвращаемое значение – указатель на buffer с преобразованной строкой или
NULL, если преобразование не удалось. Вызывающий отвечает за освобождение возвращённой строки с помощью вызоваPyMem_Free().Добавлено в версии 3.1.
-
Py_DTSF_SIGN¶
-
int PyOS_mystricmp(const char *str1, const char *str2)¶
-
int PyOS_mystrnicmp(const char *str1, const char *str2, Py_ssize_t size)¶
- Часть Stable ABI.
Регистронезависимое сравнение строк. Эти функции работают почти так же, как
strcmp()иstrncmp()(соответственно), за исключением того, что они игнорируют регистр символов ASCII.Возвращает
0, если строки равны, отрицательное значение, если str1 лексикографически меньше str2, или положительное, если больше.В аргументах str1 или str2 нулевой байт (NUL) обозначает конец строки. Для
PyOS_mystrnicmp()аргумент size задаёт максимальный размер строки, как если бы NUL находился по индексу, указанному size.Эти функции не используют локаль.
-
int PyOS_stricmp(const char *str1, const char *str2)¶
-
int PyOS_strnicmp(const char *str1, const char *str2, Py_ssize_t size)¶
Регистронезависимое сравнение строк.
В Windows это псевдонимы
stricmp()иstrnicmp()соответственно.На других платформах они являются псевдонимами
PyOS_mystricmp()иPyOS_mystrnicmp()соответственно.
Классификация и преобразование символов¶Character classification and conversion
Следующие макросы предоставляют не зависящую от локали (в отличие от стандартной библиотеки C
ctype.h) классификацию и преобразование символов.
Аргументом должно быть значение типа signed или unsigned char.
-
Py_ISALNUM(c)¶
Возвращает истину, если символ c является буквенно-цифровым.
-
Py_ISALPHA(c)¶
Возвращает истину, если символ c является буквенным символом (
a-zиA-Z).
-
Py_ISDIGIT(c)¶
Возвращает истину, если символ c является десятичной цифрой (
0-9).
-
Py_ISLOWER(c)¶
Возвращает истину, если символ c является строчной буквой ASCII (
a-z).
-
Py_ISUPPER(c)¶
Возвращает истину, если символ c является заглавной буквой ASCII (
A-Z).
-
Py_ISSPACE(c)¶
Возвращает истину, если символ c является пробельным символом (пробел, табуляция, возврат каретки, перевод строки, вертикальная табуляция или перевод страницы).
-
Py_ISXDIGIT(c)¶
Возвращает истину, если символ c является шестнадцатеричной цифрой (
0-9,a-fиA-F).
-
Py_TOLOWER(c)¶
Возвращает символ c в нижнем регистре.
-
Py_TOUPPER(c)¶
Возвращает символ c в верхнем регистре.