此代码片段在 python 3.6.4 下运行良好,但在 .pyx 文件中存在时会触发可移植性问题。我可以使用一些帮助来确定如何在 Cython 中最好地格式化 python 3.5.1+ 字节。
编辑:根据 DavidW 的评论改变这一点。
以下在 ipython 下的 python 3.6.4 中工作
def py_foo():
bytes_1 = b'bytes 1'
bytes_2 = b'bytes 2'
return b'%(bytes_1)b %(bytes_2)b' % {
b'bytes_1': bytes_1,
b'bytes_2': bytes_2}
正如所希望的那样:
print(py_foo())
b'bytes 1 bytes 2'
使用 cython 对代码的唯一更改是函数名称、声明的返回类型和声明两个变量。
%load_ext Cython
# Cython==0.28
其次是:
%%cython
cpdef bytes cy_foo():
cdef:
bytes bytes_1, bytes_2
bytes_1 = b'bytes 1'
bytes_2 = b'bytes 2'
return b'%(bytes_1)b %(bytes_2)b' % {
b'bytes_1': bytes_1,
b'bytes_2': bytes_2}
结果是:
Error compiling Cython file:
....
return b'%(bytes_1)b %(bytes_2)b' % {
^
..._cython_magic_b0aa5be86bdfdf75b98df1af1a2394af.pyx:7:38: Cannot convert 'basestring' object to bytes implicitly. This is not portable.
-djv