python------补充1

一、生成器

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

但是用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中:

   >>> for n in fib(6):
    ...     print(n)
>>> g = fib(6)
>>> while True:
...     try:
...         x = next(g)
...         print('g:', x)
...     except StopIteration as e:
...         print('Generator return value:', e.value)
...         break
...

--------------------------------异常返回-----------------------------------------------------

 g: 1
    g: 1
    g: 2
    g: 3
    g: 5
    g: 8
    Generator return value: done

二、迭代器

在这里插入图片描述

三、高阶编程

1.map/reduce
1.1map
在这里插入图片描述
1.2 reduce()
再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

在这里插入图片描述
在这里插入图片描述
2.filter

Python内建的filter()函数用于过滤序列。

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

例如,在一个list中,删掉偶数,只保留奇数,可以这么写:
在这里插入图片描述

3、布尔上下文

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.sorted

在这里插入图片描述

四、返回函数—闭包

在这里插入图片描述
在这里插入图片描述
返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
在这里插入图片描述
一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:
在这里插入图片描述

五、装饰器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、偏函数

在这里插入图片描述
int(str,base)---------------------------------指定类型转化为10进制类型。

在这里插入图片描述
在这里插入图片描述
小结
当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。

七、访问限制

在这里插入图片描述
在这里插入图片描述

八、StringIO和BytesIO

1.StringIO顾名思义就是在内存中读写str。

在这里插入图片描述

2.bytesio
在这里插入图片描述

九、操作文件和目录

1.环境变量
在这里插入图片描述
2.操作路径
在这里插入图片描述
3.拆分
在这里插入图片描述
4.
在这里插入图片描述

十、序列化

1.pickle(.pkl)
在这里插入图片描述

2.json
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

JSON进阶
在这里插入图片描述
这些可选参数就是让我们来定制JSON序列化。前面的代码之所以无法把Student类实例序列化为JSON,是因为默认情况下,dumps()方法不知道如何将Student实例变为一个JSON的{}对象。

可选参数default就是把任意一个对象变成一个可序列为JSON的对象,我们只需要为Student专门写一个转换函数,再把函数传进去即可:
在这里插入图片描述
在这里插入图片描述
同样的道理,如果我们要把JSON反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict转换为Student实例:

在这里插入图片描述
中文编码问题---------------ensure-ascii

需要设定为False,
在这里插入图片描述

十一、多进程

1.子进程
很多时候,子进程并不是自身,而是一个外部进程。我们创建了子进程后,还需要控制子进程的输入和输出。

subprocess模块可以让我们非常方便地启动一个子进程,然后控制其输入和输出。

2.线程
因为Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,
任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个

3.分布式进程
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。

十二、正则表达式

https://img-blog.csdnimg.cn/20190831172304102.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2J5bGZzag==,size_16,color_FFFFFF,t_70)

在这里插入图片描述

在这里插入图片描述

2.分组
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值