python3cython:函数_注释_产生unicode而不是str
在我的代码库中,我使用python3cython:函数_注释_产生unicode而不是str,python,python-3.x,annotations,cython,Python,Python 3.x,Annotations,Cython,在我的代码库中,我使用Cython从模块创建共享对象文件。当我尝试访问函数\uuuuuu注释\uuuuu时,当我使用Cython和不使用Cython时,我会得到不同的行为,我想知道为什么会出现这种情况: 最简单的例子: 我试图生成一个最小的可复制示例,并在同一目录中创建了以下两个文件main.py和setup.py。要求:pip安装Cython设置工具 main.py 导入设置 def测试(名称:str):通过 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu'
Cython
从模块创建共享对象文件。当我尝试访问函数\uuuuuu注释\uuuuu
时,当我使用Cython和不使用Cython时,我会得到不同的行为,我想知道为什么会出现这种情况:
最简单的例子:
我试图生成一个最小的可复制示例,并在同一目录中创建了以下两个文件main.py
和setup.py
。要求:pip安装Cython设置工具
main.py
导入设置
def测试(名称:str):通过
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
打印(测试注释、设置测试注释)
Setup.py
来自Cython.Build导入cythonize
从设置工具导入设置,扩展
def测试(名称:str):通过
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
安装程序(python_需要='>=3.6',ext_modules=cythonize([Extension('setup',['setup.py']),],language_level=“3”))
执行
python main.py
>{'name':}
>{'name':}
python setup.py build_ext--inplace
python main.py
>{'name':}
>{'name':'unicode'}
在使用共享对象文件时,我希望\uuu注释\uuu
也会产生str
,但它会产生unicode
。为什么会这样
我使用的是
python3.9.2
和Cython版本0.29.21
这实际上是一个bug报告,而不是一个问题,因此可能应该放在Cython bug跟踪器上而不是这里。幸运的是
这里发生了一些事情:
unicode
而不是str
作为它知道绝对是unicode的字符串,以确保两者都受支持language\u level=3
也会影响它-字符串是unicode的,无论它是否在Python 2或3中运行。如果您使用它,它将使用“本机”字符串,并因此返回str
(即Py2上的bytes
,Py3上的unicode
)'unicode'
,而不是
。这反映了Python的未来行为。我不认为这是Cython0.29.x中的更改,所以我有点惊讶于您在这里看到它-在这种情况下,这可能是一个意外地“正确”的快捷方式