This function is the counterpart to getargs()
. It is declared
in `Include/modsupport.h
' as follows:
object *mkvalue(char *format, ...);
It supports exactly the same format letters as getargs()
, but
the arguments (which are input to the function, not output) must not
be pointers, just values. If a byte, short or float is passed to a
varargs function, it is widened by the compiler to int or double, so
`b' and `h' are treated as `i' and `f' is
treated as `d'. `S' is treated as `O', `s' is
treated as `z'. `z#' and `s#' are supported: a
second argument specifies the length of the data (negative means use
strlen()
). `S' and `O' add a reference to their
argument (so you should DECREF()
it if you've just created it
and aren't going to use it again).
If the argument for `O' or `S' is a NULL
pointer, it is
assumed that this was caused because the call producing the argument
found an error and set an exception. Therefore, mkvalue()
will
return NULL
but won't set an exception if one is already set.
If no exception is set, SystemError
is set.
If there is an error in the format string, the SystemError
exception is set, since it is the calling C code's fault, not that of
the Python user who sees the exception.
Example:
return mkvalue("(ii)", 0, 0);
returns a tuple containing two zeros. (Outer parentheses in the
format string are actually superfluous, but you can use them for
compatibility with getargs()
, which requires them if more than
one argument is expected.)