Преобразование строк и форматирование¶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 не определена. Точная причина ошибки зависит от базовой платформы.
Следующие функции предоставляют преобразование строк в числа, не зависящее от локали.
-
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_HUGE_VAL(с соответствующим знаком) и не устанавливает никакого исключения. В противном случае,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.
Преобразует
doubleval в строку, используя заданные format_code, precision и flags.format_code должен быть одним из
'e','E','f','F','g','G'или'r'. Для'r'переданная precision должна быть равна 0 и игнорируется. Код формата'r'задаёт стандартный форматrepr().flags может быть нулём или комбинацией значений
Py_DTSF_SIGN,Py_DTSF_ADD_DOT_0илиPy_DTSF_ALT, объединённых логическим ИЛИ.Py_DTSF_SIGNозначает, что возвращаемая строка всегда будет начинаться с символа знака, даже если val неотрицательно.Py_DTSF_ADD_DOT_0гарантирует, что возвращаемая строка не будет похожа на целое число.Py_DTSF_ALTозначает применение «альтернативных» правил форматирования. См. описание спецификатораPyOS_snprintf()'#'для подробностей.
Если ptype не равно
NULL, то значение, на которое он указывает, будет установлено в одно изPy_DTST_FINITE,Py_DTST_INFINITEилиPy_DTST_NAN, что означает, что val является конечным числом, бесконечностью или не числом соответственно.Возвращаемое значение – указатель на buffer с преобразованной строкой или
NULL, если преобразование не удалось. Вызывающий отвечает за освобождение возвращённой строки с помощью вызоваPyMem_Free().Новое в версии 3.1.
-
int
PyOS_stricmp(const char *s1, const char *s2)¶ Сравнение строк без учёта регистра. Функция работает почти идентично
strcmp(), за исключением того, что игнорирует регистр.
-
int
PyOS_strnicmp(const char *s1, const char *s2, Py_ssize_t size)¶ Сравнение строк без учёта регистра. Функция работает почти идентично
strncmp(), за исключением того, что игнорирует регистр.