Преобразование и форматирование строк¶
Функции для преобразования чисел и вывода форматированной строки.
-
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()
, за исключением того, что она игнорирует регистр.