Преобразование и форматирование строк¶
Функции для преобразования чисел и вывода форматированной строки.
-
int
PyOS_snprintf(char *str, size_t size, const char *format, ...)¶ - Part of the Stable ABI.
Вывод не более size байт в str в соответствии со строкой формата format и дополнительными аргументами. См. страницу руководства Unix snprintf(3).
-
int
PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)¶ - Part of the Stable ABI.
Вывод не более size байт в str в соответствии со строкой формата format и списком аргументов переменных va. Unix man page vsnprintf(3).
PyOS_snprintf() и PyOS_vsnprintf() оборачивают функции библиотеки Standard C snprintf() и vsnprintf(). Их назначение - гарантировать последовательное поведение в угловых случаях, чего не делают стандартные функции C.
Обертки гарантируют, что str[size-1] всегда будет '\0' при возврате. Они никогда не записывают в str более size байт (включая трейлинг '\0'). Обе функции требуют, чтобы str != NULL, size > 0, format != NULL и size < INT_MAX.
Возвращаемое значение (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)¶ - Part of the Stable ABI.
Преобразовать строку
sв double, при неудаче вызывая исключение Python. Набор принимаемых строк соответствует набору строк, принимаемых конструктором Pythonfloat(), за исключением того, что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)¶ - Part of the Stable ABI.
Преобразование double val в строку с использованием предоставленных форматного_кода, точности и флагов.
код_формата должен быть одним из
'e','E','f','F','g','G'или'r'. Для'r'заданная точность должна быть равна 0 и игнорируется. Код формата'r'задает стандартный форматrepr().флаги могут быть нулем или более из значений
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(), за исключением того, что она игнорирует регистр.