python扩展正则表达式与装饰器以及一些使用细节

# -*- coding: utf-8 -*-
import requests
import time as st
import functools
import re
'''编写测时装饰器'''
def measure_time(func):
    @functools.wraps(func)
    def measure(*args, **kwargs):
        starttime = st.time()
        result = func(*args, **kwargs)
        endtime = st.time()
        print("function %s consume %ds" % (func.__name__, endtime-starttime))
        return result
    return measure
    
'''递归思想与数学归纳法'''
#汉诺塔问题

@measure_time
def move(dish, begin, stop, destination):
    if dish == 1:
        print("move dish from %s to %s" % (begin, destination))
    else:
        move(dish-1, begin, destination, stop)
        print("move dish from %s to %s" % (begin, destination))
        move(dish-1, stop, begin, destination)

#归并排序问题
@measure_time
def split(in_list):
    if len(in_list) <= 1:
        return in_list
    
    mid = len(in_list) // 2  #python3使用// python2使用/
    left = split(in_list[:mid])
    right = split(in_list[mid:])
    #return merge(left, right)
    return merge(left, right)
def merge(left, right):
    result = []
    i = 0
    j = 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1            
    result += left[i:]
    result += right[j:]
    return result
        
    
if __name__ == "__main__":
    move(3, 'A', 'B', 'C')
    #对字典切片
    in_dict = {1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7'}
    
    #通过value返回keys
    print(list(in_dict.keys())[list(in_dict.values()).index("7")])

    #print(split([10, 67,19,9,8,7,6,1,2,5,4,3]))


    '''python中正则表达式的使用进阶'''
    '''以检索80图书馆网站,网址字符串为例'''
    '''扩展正则表达式的用法'''

    
    url = r'https://www.80xs.la/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}
    html = requests.get(url, headers=headers)
    print(html.text)
    #无预搜索的正则表达式
    pattern = re.compile(r'<li><a href=.*>.*<\/li>')
    
    #使用预搜索的正则表达式,相当于if, 主要用于提取字符串中的指定字符
    #(?=...) 要是一个字符串后面是...,开始匹配这个字符串,翻译成自然语言:假设字符串之后是...则匹配
    #(?!...) 要是一个字符串后面不是...,开始匹配这个字符串,翻译成自然语言:假设字符串之后不是...则匹配
    #(?<=...) 要是一个字符串前面是...,开始匹配这个字符串, 翻译成自然语言:假设字符串之前是...则匹配
    #(?<!...) 要是一个字符串前面不是...,开始匹配这个字符串, 翻译成自然语言:假设字符串之前不是...则匹配
    '''正常re模块中的findall函数中使用(com|cn),findall函数默认会将可捕获分组以tuple数据类型输出,由于()()会创建一个分组,则输出会把com或者cn单独输出'''
    #使用(?:...) 与() 都是分组,()是捕获分组,值会被保存下来,使用$n取值.(?:...)是非捕获分组,值不会被保存下来

    patternnet = re.compile(r'(?<=<li><a href=")(?:https?:\/\/www\.\w+\.)(?:com|cn|la)(?:\/)(?:\/.*\/.*\.html)?')
    patternyu = re.compile(r'(?:https?:\/\/www\.\w+\.)(?:com|cn|la)(?:\/)(?=<\/a>)(?:.*\/.*\/.*.html)?')
    #(?P<name>...)用于为group分组命名(?(name)Y|N) 若找到name命名的分组,则执行Y,否则执行N
    patternpy = re.compile(r'(?P<dnode><li><a href=")(?(dnode)(?:(?:[https]{4,5}:\/\/www\.\w+\.))(?:com|cn|la)(?:\/))(?:\/.*\/.*.html)?')
    matcher = re.findall(patternyu, html.text)
    for i in matcher:
        print(i)
                
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值