装饰器的使用
#时间装饰器,日志装饰器
def log(func):
def logger_warpper(*args,**kwargs):
print(func.__name__+' is running')
result = func(*args,**kwargs)
print(func.__name__+' is finish')
return result
return logger_warpper
@log
def timer (func):
def time_warpper(*args,**kwargs):
from time import time
start_time = time()
result = func(*args,**kwargs)
end_time = time()
use_time = end_time - start_time
print(func.__name__+' use %.6f' % (use_time))
return result
return time_warpper
@timer
def f(n):
sum = 0
for i in range(n):
sum += i
return sum
print(f(100000))
#输出的结果
timer is running
timer is finish
f use 0.010936
4999950000
python的四种内置数据结构
- List:可以做为数组,队列,栈。可以改变数据内容。顺序存储的,可以通过索引访问。
增加元素:append,insert
删除元素:pop,remove
更新元素:List[index]=updatevalue - Tuple:是不可变的数据结构,初始化后就不可以改变,多用于查找
- Set:不重复的集合
- Dict:key-value的形式,key必须是不可变的元素,key不可重复
我常用内建模块
- time:用于获取时间
- re:进行正则表达式的匹配
re.findall()查找所有匹配的字符串
re.match()从开始位置开始匹配,如果开始位置匹配不上则返回None
re.search()扫描整个字符串,查看是否有匹配 - itertools:迭代的模块
- request:用于进行http请求,request.post(url,body),request.get(url,params)
- os:文件路径,os.listdir(path)获取path下的所有文件和文件夹,os.path.join(file,path)连接路径
python的全排列(itertools)
list = [1,2,3] ,每个值只可以取一次
from itertools import combinations
l = [1,2,3]
print(list(combinations(l,2)))
结果
[(1, 2), (1, 3), (2, 3)]
list = [1,2,3] ,每个值只可以取一次的全排列
from itertools import permutations
l = [1,2,3]
print(list(permutations(l,2)))
结果
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
list = [1,2,3] ,可以重复取值
from itertools import product
l = [1,2,3]
print(list(product(l,repeat=2)))
结果
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
split()和strip()的区别
str = ' abc def g '
print(str.strip())
只除去首位,结果:abc def g
print(str.split(' '))
按空格进行切割,结果是list,['', '', '', 'abc', 'def', 'g', '', '', '']
生成器generator
列表生成式
l = [x for x in range(3)]
print(l)
#结果是个list,[0, 1, 2]
生成器
g = (x for x in range(3))
print(g)
#直接print的话无法看到结果<generator object <genexpr> at 0x000000000224D138>
#通过for循环或者next()来获取结果
for i in g:
print(i)
生成器函数
def fungenerator(n):
for i in range(n):
yield i#yield可以返回一个结果
f = fungenerator(3)
print(f)
#直接print的话无法看到结果<generator object <genexpr> at 0x000000000224D138>
#通过for循环或者next()来获取结果
for i in f:
print(i)
猴子补丁
在运行期间动态修改一个类或模块会比较灵活。
功能:引用团队通用库里的模块,又想丰富模块的功能,就可以用猴子补丁
用ujson替换json又不需要改其他的代码
import json
import ujson
def monkey_patch_json():
json.__name__ = 'ujson'
json.dumps = ujson.dumps
json.loads = ujson.loads
monkey_patch_json()