所谓标准库,是要满足一些比通用计算和操作而设计的库。必须访问操作系统接口、文件读写、复杂数学计算、网络传输等。
语法
with 语法
Python内置函数
http://www.runoob.com/python/python-built-in-functions.html
数学运算内置函数
abs返回输入的绝对值。divmod返回一个包含商和余数的元组。
IO函数
input返回用户的交互输入。open返回被打开的文件对象。
raw_input
对象函数
all()输入一个数组,如果所有元素不为0、’‘、False或者iterable为空,all(iterable)返回True,否则返回False
any() 函数用于判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、0、false,则返回 False,如果不都为空、0、false,则返回 True。
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
vars()输入一个对象,函数返回对象object的属性和属性值的字典对象。
staticmethod
classmethod
map函数 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
locals 和 globals
yield 和 next
带有yield的函数并不是普通的函数,而是一个结合next使用的生成器。每次调用next时,会从yield上次结束的地方开始。遇到yield就结束返回当次运行。
操作系统接口访问
操作系统命令库import os
- os.system(‘some_commands’) 执行操作系统的命令。用它可以直接去调用系统的命令。不过python还是提供了很多自有的命令来包装操作系统命令。
- os.getcwd() 获取当前工作路径
- os.chdir() 更改当前路径
文件操作库import shutil
python自己的文件操作模块。
- shutil.copyfile(‘src_file’, ‘dst_file’) 文件拷贝
- shutil.move(‘src_file’,’dst_file’) 文件移动
文件名通配库import glob
用于文件名通配查找。glob.glob('path_name')
会返回当前目录下所有通配的文件名,path_name可以用正则表达式进行通配。
Python 调用 C/C++库
pybind11: 使用简洁的语法将C++函数、类和对象导出为Python模块。名称中11的意思是C++11.
多线程并发
多线程库import threading
在多CPU的架构下运行多线程程序是极好的,python提供了自己的threading
库来让python程序使用多线程。
多线程的程序中要面临的数据共享问题,因此为线程提供有锁、信号量、条件变量、事件、队列。使用的方法和操作系统中的这些东西很接近。
threading.Event
线程可以set或wait一个事件。threading.Lock
thrading.Condition
threading.Semaphore
import Queue
这是一个同步的、线程安全的队列,用它作为线程之间的数据共享更方便。
性能和质量测试
时间测试import timeit
import timeit
timeit.timeit('some-commands/operations', number=100)
可以通过timeit来测试一下一些简单操作的时间性能,number参数是测试的次数。
单元测试import unittest
用于单元测试的模块。可以单独写一个测试类,继承自unittest.TestCase
。
- setUp方法会最早运行,用于测试初始化的工作。
- tearDown方法会最后运行,用于善后处理工作。
- 其他自定义的测试方法名称都以test开头。
文档测试import doctest
该模块可以找出文档字符串中的测试用例来进行测试。大大省去为每个函数单独编写测试用例程序的成本。
文档字符串是python源码中被“”“包围起来的文本。
import doctest
doctest.testmod()
加上这个函数之后,python会去所有文档字符串中进行查找形如下面这样内容作为测试用例。
>>> function-name(function-input)
function-return-value
找到之后,就会拿它作为函数function-name的测试用例进行测试,如果运行结果和function-return-value不同的话,则会输出这一次单元测试的错误内容。
下面是个弱智例子。这是一个两个参数做加法后返回的函数,文档字符串中写出了函数运行结果1+1=3,很明显和运行结果不对,因此这里就会测试时报错了。
GIL - Global Interpreter Lock
什么是Python的GIL?
严格来讲GIL不是Python的。Python作为编程语言是没有GIL这个概念的,有GIL的是某些Python解释器,它们在实现Python语言时对线程的处理方式有所不同。
干什么用的?
GIL可以翻译为全局解释器锁
,用于python解释器对多线程的序列化。在多核系统中,本来多核可以并行多个线程的。GIL就就意味着不能使用多核了,也就是说,即使对于多核系统,同一时间也只有一个拥有GIL锁的python线程在运行。GIL存在于CPython和PyPy解释器里,Jython和IronPython没有GIL。
为什么CPython会用GIL?
- 对于单核系统来说,GIL有优化作用,加速多线程程序在单核系统中运行。
- 对线程不安全的C语言库比较友好。
- CPyhon的内存管理是线程不安全的。
GIL必须取缔吗?
虽然GIL使得一个Python进程中的多线程不可以使用多核。但是Python的多进程multiprocessing
程序是可以是用多核的。Python主线程fork多个子进程,然后一个核运行一个进程是可以的。
强大的三方库
gradio
streamlit