字节对象 – 具体对象层(Python教程)(参考资料)
字节对象
这些功能提升TypeError
当期望一个字节参数并被称为非字节参数时
- int
PyBytes_CheckExact
( PyObject *o) - 返回true如果对象o是一个字节对象,但不是字节类型的asubtype实例.
- PyObject*
PyBytes_FromString
( const char *v) - Return value: New reference.
返回一个带有字符串副本v成功的价值,以及失败时的NULL。参数v一定不能是NULL;它不会被摧毁.
- PyObject*
PyBytes_FromStringAndSize
( const char *v,Py_ssize_t len) - Return value: New reference.
返回一个新的字节对象,其中包含字符串v的副本作为值和长度len成功,并且NULL失败了。如果v是NULL,那么bytes对象的内容是未初始化的.
- PyObject*
PyBytes_FromFormat
( const char *format, …) - Return value: New reference.
取一个C
printf()
– 样式format字符串和可变数量的参数,计算生成的Python字节对象的大小和返回字节对象的值格式化进去。变量arguments必须是C类型,并且必须与format字符串中的格式字符完全对应。允许使用以下格式字符:格式字符 键入 注释 %%
n/a 字面%字符 %c
//int 单个字节,表示为C int %d
int 等于 printf("%d")
。[1]%u
unsigned int 相当于 printf("%u")
。[1]%ld
长 相当于 printf("%ld")
。[1]%lu
unsigned long 相当于 printf("%lu")
。[1]%zd
Py_ssize_t 相当于 printf("%zd")
。[1]%zu
size_t 相当于 printf("%zu")
。[1]%i
int 相当于 printf("%i")
。[1]%x
int 相当于 printf("%x")
。[1]%s
const char * 以null结尾的C characterarray. %p
const void * Cpointer的十六进制表示。大致相当于 printf("%p")
除了保证从文字0x
开始,不管平台的printf
yields.一个无法识别的格式字符导致所有其余的格式字符串,作为结果对象的原样,并且丢弃任何额外的参数.
[1] (1, 2, 3, 4, 5, 6, 7, 8)对于整数说明符(d,u,ld,lu,zd,zu,i,x):即使给出精度,0转换标志也有效.
- PyObject*
PyBytes_FromFormatV
( const char *format,va_list vargs) - Return value: New reference.
与
PyBytes_FromFormat()
相同,只是它需要两个参数.
- PyObject*
PyBytes_FromObject
( PyObject *o) - Return value: New reference.
返回实现bufferprotocol的对象o的字节表示.
- Py_ssize_t
PyBytes_Size
( PyObject *o) - 返回以字节为单位的字节长度o.
- Py_ssize_t
PyBytes_GET_SIZE
( PyObject *o) PyBytes_Size()
的宏观形式,但没有错误检查.
- char*
PyBytes_AsString
( PyObject *o) - 返回指向o。指针指向o的内部缓冲区,由
len(o) + 1
字节。无论是否有任何其他空字节,缓冲区中的最后一个字节始终为空。除非对象刚刚使用PyBytes_FromStringAndSize(NULL, size)
。它不能被解除分配。如果o根本不是字节对象,PyBytes_AsString()
返回NULL并引发TypeError
.
- char *
PyBytes_AS_STRING
( PyObject *string) PyBytes_AsString()
的宏形式,但没有错误检查.
- int
PyBytes_AsStringAndSize
( PyObject *obj,char **buffer,Py_ssize_t *length) - 返回以null结尾的内容对象obj通过输出变量buffer和length.
如果length是NULL,bytes对象可能不包含嵌入的空字节;如果是,则函数返回
-1
和ValueError
被养了缓冲区指的是obj,最后包括一个额外的空字节(不计入length)。除非对象刚刚使用
PyBytes_FromStringAndSize(NULL, size)
创建,否则不会以任何方式修改数据。它不能被解除分配。如果obj根本不是一个字节对象,PyBytes_AsStringAndSize()
返回-1
并引发TypeError
.在版本3.5中更改:以前,
TypeError
是在字节对象中遇到嵌入的空字节时引发的.
- void
PyBytes_Concat
( PyObject **bytes,PyObject *newpart) - 在*bytes中创建一个新的字节对象,其中newpart的内容附加到bytes;调用者将拥有新的引用。对bytes的旧值的引用将被盗。如果新对象无法处理,则bytes的旧引用仍将被丢弃,而*bytes的值将设置为NULL;将设置相应的异常.
- void
PyBytes_ConcatAndDel
( PyObject **bytes,PyObject *newpart) - 创建*bytes中的一个新的字节对象,包含附加到newpart的bytes的内容。这个版本递减了newpart.
- int
_PyBytes_Resize
的引用计数( PyObject **bytes,Py_ssize_t newsize) - 一种调整字节对象大小的方法,即使它是“不可变的”。只使用它来构建一个全新的字节对象;如果字节可能已经在代码的其他部分中已知,则不要使用此方法。如果输入字节对象上的引用计数不是1,则调用此函数是错误的。将现有字节对象的地址作为左值(可以写入)传递,并且新的sizedesired。成功时,*bytes保存调整大小的字节对象和
0
返回;*bytes中的地址可能与其输入值不同。如果分配失败,则*bytes的原始字节对象被解除分配,*bytes设置为NULL,MemoryError
设置,-1
返回
评论被关闭。