python学习手册(六)----Cython的学习和使用

Python学习手册:

1.python语法:列表推导式
2.numpy 一些函数
3.matplotlib 一些函数
4.matplotlib 高阶函数
5.线程/进程 函数
6.Cython的使用
7.LMDB的读取


1.Cython概念

Cython是让Python脚本支持C语言扩展的编译器,Cython能够将Python+C混合编码的.pyx脚本转换为C代码,主要用于优化Python脚本性能或Python调用C函数库。由于Python固有的性能差的问题,用C扩展Python成为提高Python性能常用方法,Cython算是较为常见的一种扩展方式。

Python的文件类型介绍:

  • .py python的源代码文件

  • .pyc Python源代码import后,编译生成的字节码

  • .pyo Python源代码编译优化生成的字节码。pyo比pyc并没有优化多少,只是去掉了断言

  • .pyd Python的动态链接库(Windows平台)

  • .py, .pyc, .pyo 运行速度几乎无差别,只是pyc, pyo文件加载的速度更快,不能用文本编辑器查看内容,反编译不太容易

2.Cython性质

2.1Cython的编译流程

在这里插入图片描述
分两步:

1).pyx文件使用Cython被编译为.c文件;

2).c文件使用C编译器生成.pyd(windos)或.so(linux)文件。

所以在编写的过程中,只需要编写.pyx脚本,这个脚本中,你既可以使用python函数也可以使用C语言函数

3.pyx的使用:

  • cimport 是 Cython 中用来引入 .pxd 文件的命令。有关 .pxd 文件,可以简单理解成 C/C++ 中用来写声明的头文件,更具体的我会在后面写到。这里引入的两个是 Cython 预置的。

  • Cython 的函数使用 cdef 定义,并且他可以给所有参数以及返回值指定类型。比方说,我们可以这么编写整数 min 函数:

  cdef int my_min(int x, int y):
      return x if x <= y else y

4.setup的编写

參考链接:https://www.jianshu.com/p/fc5025094912
参考链接:https://blog.csdn.net/ztf312/article/details/74998917



glob() 函数

返回匹配指定模式的文件名或目录。

该函数返回一个包含有匹配文件 / 目录的数组。如果出错返回 false。


encode()和decode()函数

和如何把如乱码般的字符串转成中文。

encode()和decode()都是字符串的函数,可直接查看关于python字符串章节的官方文档:
https://docs.python.org/3/library/stdtypes.html?highlight=encode#string-methods

从英文意思上看,encode和decode分别指编码和解码。在python中,Unicode类型是作为编码的基础类型,即:

  decode        |         encode

str ---------> str(Unicode) ---------> str
>>> u = '中文'                 # 指定字符串类型对象u 

>>> str1 = u.encode('gb2312')  # 以gb2312编码对u进行编码,获得bytes类型对象
>>> print(str1)
b'\xd6\xd0\xce\xc4'

>>> str2 = u.encode('gbk')     # 以gbk编码对u进行编码,获得bytes类型对象
>>> print(str2)
b'\xd6\xd0\xce\xc4'
>>> str3 = u.encode('utf-8')   # 以utf-8编码对u进行编码,获得bytes类型对象
>>> print(str3)
b'\xe4\xb8\xad\xe6\x96\x87'

>>> u1 = str1.decode('gb2312') # 以gb2312编码对字符串str进行解码,获得字符串类型对象
>>> print('u1')
'中文'

>>> u2 = str1.decode('utf-8')  # 报错,因为str1是gb2312编码的
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte



发布了68 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35307005/article/details/90167149