Python基础学习笔记(二)

装饰器的使用

#时间装饰器,日志装饰器
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的四种内置数据结构

  1. List:可以做为数组,队列,栈。可以改变数据内容。顺序存储的,可以通过索引访问。
    增加元素:append,insert
    删除元素:pop,remove
    更新元素:List[index]=updatevalue
  2. Tuple:是不可变的数据结构,初始化后就不可以改变,多用于查找
  3. Set:不重复的集合
  4. Dict:key-value的形式,key必须是不可变的元素,key不可重复

我常用内建模块

  1. time:用于获取时间
  2. re:进行正则表达式的匹配
    re.findall()查找所有匹配的字符串
    re.match()从开始位置开始匹配,如果开始位置匹配不上则返回None
    re.search()扫描整个字符串,查看是否有匹配
  3. itertools:迭代的模块
  4. request:用于进行http请求,request.post(url,body),request.get(url,params)
  5. 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()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值