functools模块
wraps 的作用是将原函数对象的指定属性复制给包装函数对象
reduce()函数也是Python内置的一个高阶函数。
reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
例如,编写一个f函数,接收x和y,返回x和y的和:
1
2
|
def f(x, y): return x + y |
调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:
1
2
3
4
5
|
先计算头两个元素:f( 1 , 3 ),结果为 4 ; 再把结果和第 3 个元素计算:f( 4 , 5 ),结果为 9 ; 再把结果和第 4 个元素计算:f( 9 , 7 ),结果为 16 ; 再把结果和第 5 个元素计算:f( 16 , 9 ),结果为 25 ; 由于没有更多的元素了,计算结束,返回结果 25 。 |
上述计算实际上是对 list 的所有元素求和。虽然Python内置了求和函数sum(),但是,利用reduce()求和也很简单。
reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:
1
|
reduce (f, [ 1 , 3 , 5 , 7 , 9 ], 100 ) |
结果将变为125,因为第一轮计算是:
计算初始值和第一个元素:f(100, 1),结果为101。
partial
functools.partial(func, *args, **keywords),函数装饰器,返回一个新的partial对象。调用partial对象和调用被修饰的函数func相同,只不过调用partial对象时传入的参数个数通常要少于调用func时传入的参数个数。当一个函数func可以接收很多参数,而某一次使用只需要更改其中的一部分参数,其他的参数都保持不变时,partial对象就可以将这些不变的对象冻结起来,这样调用partial对象时传入未冻结的参数,partial对象调用func时连同已经被冻结的参数一同传给func函数,从而可以简化调用过程。
如果调用partial对象时提供了更多的参数,那么他们会被添加到args的后面,如果提供了更多的关键字参数,那么它们将扩展或者覆盖已经冻结的关键字参数。
partial对象的调用如下,
import functools
def add(a,b):
return a + b
add3 = functools.partial(add,3)
add5 = functools.partial(add,5)
print add3(4)
print add5(10)
print(random.random()) #0,1;大于0且小于1之间的小数
print(random.randint(1,3)) #大于等于1且小于等于3之间的整数
print(random.randrange(1,3)) #大于等于1且小于3之间的整数
print(random.choice([1,'a',[1,2,3]])) #从定义的列表中随机选取
print(random.sample([1,2,3,4,5],3)) #列表中元素任选(3)个数
print(random.uniform(1,3)) #大于1小于3的小数
item=[1,3,5,7,9]
random.shuffle(item) #打乱item的顺序相当于洗牌
shutil模块
压缩
import shutil
ret=shutil.make_archive()
解压
import tarfile
t=tarfile.open(目录)
sys模块
sys.argv
sys.path
json的中间格式为字符串,用t写入文件
Pickle的中间格式为bytes,用b写入文件
XML模块
xml下的元素对应三个特质,tag,attrib,text