python参数_解析参数并构建值变量

s (str) [const char *]将一个Unicode对象转换成一个指向字符串的C指针。一个指针指向一个已经存在的字符串,这个字符串存储的是传如的字符指针变量。C字符串是已空结束的。Python字符串不能包含嵌入的无效的代码点;如果由,一个 ValueError 异常会被引发。Unicode对象被转化成 'utf-8' 编码的C字符串。如果转换失败,一个 UnicodeError 异常被引发。

注解

这个表达式不接受 bytes-like objects。如果你想接受文件系统路径并将它们转化成C字符串,建议使用 O& 表达式配合 PyUnicode_FSConverter() 作为 转化函数。

在 3.5 版更改:以前,当Python字符串中遇到了嵌入的null代码点会引发 TypeError 。

这个表达式既接受Unicode对象也接受类字节类型对象。它为由调用者提供的 Py_buffer 结构赋值。这里结果的C字符串可能包含嵌入的NUL字节。Unicode对象通过 'utf-8' 编码转化成C字符串。

s# (str, 只读 bytes-like object) [const char *, int or Py_ssize_t]像 s*,除了它不接受易变的对象。结果存储在两个C 变量中,第一个是指向C字符串的指针,第二个是它的长度。字符串可能包含嵌入的null字节。Unicode对象都被通过 'utf-8' 编码转化成C字符串。

z (str or None) [const char *]与 s 类似,但 Python 对象也可能为 None,在这种情况下,C 指针设置为 NULL。

z* (str, bytes-like object or None) [Py_buffer]与 s* 类似,但 Python 对象也可能为 None,在这种情况下,Py_buffer 结构的 buf 成员设置为 NULL。

z# (str, 只读 bytes-like object 或 None) [const char *, int or Py_ssize_t]与 s# 类似,但 Python 对象也可能为 None,在这种情况下,C 指针设置为 NULL。

y (read-only bytes-like object) [const char *]这个表达式将一个类字节类型对象转化成一个指向字符串的C指针;它不接受Unicode对象。字节缓存区必须不包含嵌入的null字节;如果包含了null字节,会引发一个 ValueError 异常。

在 3.5 版更改:以前,当字节缓冲区中遇到了嵌入的null字节会引发 TypeError 。

s* 的变式,不接受Unicode对象,只接受类字节类型变量。这是接受二进制数据的推荐方法。

y# (只读 bytes-like object) [const char *, int or Py_ssize_t]This variant on s# doesn't accept Unicode objects, only bytes-like

objects.

S (bytes) [PyBytesObject *]要求Python对象是一个 bytes 类型对象,没有尝试任何的转换。如果不是一个字节类型对象会引发 TypeError 异常。C变量也可能声明为 PyObject* 类型。

Y (bytearray) [PyByteArrayObject *]要求Python对象是一个 bytearray 类型对象,没有尝试任何的转换。如果不是一个 bytearray 类型对象会引发 TypeError 异常。C变量也可能声明为 PyObject* 类型。

u (str) [const Py_UNICODE *]将一个Python Unicode对象转化成指向一个以空终止的Unicode字符缓冲区的指针。你必须传入一个 Py_UNICODE 指针变量的地址,存储了一个指向已经存在的Unicode缓冲区的指针。请注意一个 Py_UNICODE 类型的字符宽度取决于编译选项(16位或者32位)。Python字符串必须不能包含嵌入的null代码点;如果有,引发一个 ValueError 异常。

在 3.5 版更改:以前,当Python字符串中遇到了嵌入的null代码点会引发 TypeError 。

Deprecated since version 3.3, will be removed in version 4.0:这是旧版样式 Py_UNICODE API; 请迁移至 PyUnicode_AsWideCharString().

u# (str) [const Py_UNICODE *, int 或 Py_ssize_t]u 的变式,存储两个C变量,第一个指针指向一个Unicode数据缓存区,第二个是它的长度。它允许null代码点。

Deprecated since version 3.3, will be removed in version 4.0:这是旧版样式 Py_UNICODE API; 请迁移至 PyUnicode_AsWideCharString().

Z (str 或 None) [const Py_UNICODE *]与 u 类似,但 Python 对象也可能为 None,在这种情况下 Py_UNICODE 指针设置为 NULL。

Deprecated since version 3.3, will be removed in version 4.0:这是旧版样式 Py_UNICODE API; 请迁移至 PyUnicode_AsWideCharString().

Z# (str 或 None) [const Py_UNICODE *, int 或 Py_ssize_t]与 u# 类似,但 Python 对象也可能为 None,在这种情况下 Py_UNICODE 指针设置为 NULL。

Deprecated since version 3.3, will be removed in version 4.0:这是旧版样式 Py_UNICODE API; 请迁移至 PyUnicode_AsWideCharString().

U (str) [PyObject *]要求Python对象是一个Unicode对象,没有尝试任何的转换。如果不是一个Unicode对象会引发 TypeError 异常。C变量也可能声明为 PyObject* 类型。

w* (可读写 bytes-like object) [Py_buffer]这个表达式接受任何实现可读写缓存区接口的对象。它为调用者提供的 Py_buffer 结构赋值。缓冲区可能存在嵌入的null字节。当缓冲区使用完后调用者需要调用 PyBuffer_Release()。

es (str) [const char *encoding, char **buffer]s 的变式,它将编码后的Unicode字符存入字符缓冲区。它只处理没有嵌入NUL字节的已编码数据

此格式需要两个参数。 第一个仅用作输入,并且必须是 const char*,该名称将编码的名称指向 NUL 终止字符串或"NULL",在这种情况下,使用 'utf-8' 编码。如果 Python 不知道命名编码,则引发异常。 第二个参数必须为 char** 它引用的指针的值将设置为包含参数文本内容的缓冲区。文本将以第一个参数指定的编码进行编码。

PyArg_ParseTuple() 会分配一个足够大小的缓冲区,将编码后的数据拷贝进这个缓冲区并且设置 *buffer 引用这个新分配的内存空间。调用者有责任在使用后调用 PyMem_Free() 去释放已经分配的缓冲区。

et (str, bytes or bytearray) [const char *encoding, char **buffer]和 es 相同,除了不用重编码传入的字符串对象。相反,它假设传入的参数是编码后的字符串类型。

es# (str) [const char *encoding, char **buffer, int 或 Py_ssize_t *buffer_length]s# 的变式,它将已编码的Unicode字符存入字符缓冲区。不像 es 表达式,它允许传入的数据包含NUL字符。

它需要三个参数。 第一个仅用作输入,并且必须为 const char*,该对象指向一个编码格式名称,形式为以 NUL 结束的字符串或 NULL,在后一种情况下将使用 'utf-8' 编码格式。 如果编码格式名称无法被 Python 识别则会引发异常。 第二个参数必须为 char**;它所引用的指针的值将被设为包含参数文本内容的缓冲区。 文本将以第一个参数所指定的编码格式进行编码。 第三个参数必须是指向一个整数的指针;所引用的整数将被设为输出缓冲区中的字节数。

有两种操作方式:

如果 *buffer 指向 NULL 指针,则函数将分配所需大小的缓冲区,将编码的数据复制到此缓冲区,并设置 *buffer 以引用新分配的存储。 呼叫者负责调用 PyMem_Free() 以在使用后释放分配的缓冲区。

如果 *buffer 指向非 NULL 指针(已分配的缓冲区),则 PyArg_ParseTuple() 将使用此位置作为缓冲区,并将 *buffer_length 的初始值解释为缓冲区大小。 然后,它将将编码的数据复制到缓冲区,并终止它。 如果缓冲区不够大,将设置一个 ValueError。

在这两个例子中,*buffer_length 被设置为编码后结尾不为NUL的数据的长度。

et# (str, bytes 或 bytearray) [const char *encoding, char **buffer, int 或 Py_ssize_t *buffer_length]和 es# 相同,除了不用重编码传入的字符串对象。相反,它假设传入的参数是编码后的字符串类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值