我使用的是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)
答案 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”。)