是Python库参考,版本3.6.5,第16.16段ctypes - Python的外部函数库部分过时了吗?

时间:2018-05-25 07:57:36

标签: python python-3.6 ctypes

我使用的是64位Windows,使用CPython,版本3.6.5。

以上引用的文档在Surprises部分中指出s.value is s.value返回False。但是在我的机器上它会返回True

Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> s = c_char_p
>>> s.value = 'abc def ghi'
>>> s.value
'abc def ghi'
>>> s.value is s.value
True
>>>

相关文件是否已过时或我遗失了什么?

我的原帖有一个关键的错误。我错过了s = c_char_p中的尾随括号。 这是更正后的版本,也考虑了字节字符串和Unicode字符串之间的区别。

from ctypes import *

s = c_char_p()              # bytes string
# s = c_wchar_p()           # Unicode string                 
s.value = b'abc def ghi'    # if bytes string
# s.value = 'abc def ghi'   # if Unicode string
# print(s.value)
print(s.value is s.value)

1 个答案:

答案 0 :(得分:0)

这是我自己的问题的答案,作为讨论的底线:

不, Python库参考,版本3.6.5,第16.16段ctypes - Python的外部函数库并未部分过时。但它至少受到两篇社论的影响。

虽然这个问题是由我的一个愚蠢的错误造成的,但是那些时候被删除的评论和答案表明,Python从字节串到Unicode字符串的过渡并未完全遵循:

不完整类型中的代码段使用(defun euler-1 (n) (loop for i below n when (or (zerop (mod i 3)) (zerop (mod i 5))) sum i)) 但为其分配Unicode字符串,从而生成c_char_p。这同样适用于 Surprises 中的最后一个代码段。

这些小缺陷确实值得一提。引用 Dlib C ++库的创建者 Davis King ,BTW提供了一个Python API: 我认为文档是图书馆最重要的部分。因此,如果您发现任何未记录的内容,不清楚或过时的文档,请告诉我,我会修复它。http://dlib.net/

(是的,我已发送电子邮件至“docs@python.org”。)