Parsing arguments and building valuesΒΆ

These functions are useful when creating your own extensions functions and methods. Additional information and examples are available in Extending and Embedding the Python Interpreter.

The first three of these functions described, :cfunc:`PyArg_ParseTuple`, :cfunc:`PyArg_ParseTupleAndKeywords`, and :cfunc:`PyArg_Parse`, all use format strings which are used to tell the function about the expected arguments. The format strings use the same syntax for each of these functions.

A format string consists of zero or more “format units.” A format unit describes one Python object; it is usually a single character or a parenthesized sequence of format units. With a few exceptions, a format unit that is not a parenthesized sequence normally corresponds to a single address argument to these functions. In the following description, the quoted form is the format unit; the entry in (round) parentheses is the Python object type that matches the format unit; and the entry in [square] brackets is the type of the C variable(s) whose address should be passed.

s (string or Unicode) [const char *]
Convert a Python string or Unicode object to a C pointer to a character string. You must not provide storage for the string itself; a pointer to an existing string is stored into the character pointer variable whose address you pass. The C string is NUL-terminated. The Python string must not contain embedded NUL bytes; if it does, a TypeError exception is raised. Unicode objects are converted to C strings using the default encoding. If this conversion fails, a UnicodeError is raised.
s# (string, Unicode or any read buffer compatible object) [const char *, int (or :ctype:`Py_ssize_t`, see below)]

This variant on s stores into two C variables, the first one a pointer to a character string, the second one its length. In this case the Python string may contain embedded null bytes. Unicode objects pass back a pointer to the default encoded string version of the object if such a conversion is possible. All other read-buffer compatible objects pass back a reference to the raw internal data representation.

Starting with Python 2.5 the type of the length argument can be controlled by defining the macro :cmacro:`PY_SSIZE_T_CLEAN` before including Python.h. If the macro is defined, length is a :ctype:`Py_ssize_t` rather than an int.

s* (string, Unicode, or any buffer compatible object) [Py_buffer]

Similar to s#, this code fills a Py_buffer structure provided by the caller. The buffer gets locked, so that the caller can subsequently use the buffer even inside a Py_BEGIN_ALLOW_THREADS block; the caller is responsible for calling PyBuffer_Release with the structure after it has processed the data.

New in version 2.6:

New in version 2.6.

z (string, Unicode or None) [const char *]
Like s, but the Python object may also be None, in which case the C pointer is set to NULL.
z# (string, Unicode, None or any read buffer compatible object) [const char *, int]
This is to s# as z is to s.
z* (string, Unicode, None or any buffer compatible object) [Py_buffer]

This is to s* as z is to s.

New in version 2.6:

New in version 2.6.