day11 初识装饰器

1闭包复习

#函数名 就是一串内存地址 可以赋值 可以作为容器类型的元素 、函数的参数和 返回值 第一类对象
# 闭包
def outer():
    a=1
    def inner():
        print(a)
    return inner
i=outer()
i()
<<<
1

2作业讲解

#2.写函数接收n个数字求这些参数数字的和
def sum_fun(*args):
    total=0
    for i in args:
        total+=i
    return total
print(sum_fun(1,2,8))
<<<
11
#读代码 回答代码中打印出来的abc分别是什么 为什么
a=10
b=20
def test5(a,b):
    print(a,b)
c=test5(b,a)
print(c)             #20,10

b=20
a=13
def test5(a,b):
    a=3
    b=5
    print(a,b)
c=test5(b,a)
print(c)             #3,5  内部有就不跟上级要了
<<<
20 10
None
3 5
None

time 模块

import time
print(time.time()) #返回当前时间的时间戳(1970纪元后经过的浮点秒数)1544769062.0091138
time.sleep(3) #让程序执行到这个位置时停一会
print('111')
<<<
1544773092.0564687
111

3初识装饰器

1.装饰器

'''装饰器的作用:不想修改函数的调用方式,但是还想在原来的函数前后添加功能
原则:开放封闭原则  开放对拓展是开放的 对修改是封闭的
语法糖@
装饰器的固定模式'''

#timemer就是一个装饰器函数 只是对一个函数有一些装饰作用
import time
def timmer(f):           #装饰器函数
    def inner():
        start=time.time()
        ret=f()          #被装饰的函数
        end=time.time()
        print(end-start)
        return ret
    return inner

@timmer  #语法糖@ 装饰器函数名
def func(): #被装饰的函数
    time.sleep(0.01)
    print("老板好")
    return '新年好'
#func=timemer(func)  #有了@timmer 就不用这一行了
ret=func()
print(ret)

<<<
老板好
0.015593528747558594
新年好

2.封板

#封板
def outer():
    def inner():
        print('kkk')
        return 'inner'

    print('lll')
    return inner()
print(outer())

<<<
lll
kkk
inner

3.装饰带参数函数的装饰器

#装饰带参数函数的装饰器
import time
def timmer(f):
    def inner(*args,**kwargs):
        start=time.time()
        ret=f(*args,**kwargs)
        end=time.time()
        print(end-start)
        return ret
    return inner
@timmer
def func(a,b):
    time.sleep(1)
    print('老板好',a,b)
    return '新年好'
#func=timmer(func)
ret=func(1,2)  #inner(1,2)
ret1=func(1,b=3)  #inner(1,2)
print(ret,ret1)
<<<
老板好 1 2
1.0005967617034912
老板好 1 3
1.0001435279846191
新年好 新年好

4.装饰器的固定模式

#装饰器的固定模式
import time
def wrapper(f):   #wrapper是装饰器函数 f是被装饰的函数
    def inner(*args,**kwargs):
        '''在被装饰函数之前要做的事'''
        ret=f(*args,**kwargs)
        '''在被装饰函数之后要做的事'''
        return  ret
    return inner
@wrapper       #相当于func=wrapper(func)
def func(a,b):
    time.sleep(1)
    print('hhhh',a+b)
    return '666'
print(func(1,5))   #相当于inner(1,5)

<<<
hhhh 6
666
def wrapper():
    def inner():
        pass
    return inner

 

转载于:https://www.cnblogs.com/hi-python/p/10119812.html

  • 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 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
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、付费专栏及课程。

余额充值