python学习之老男孩python全栈第九期_day012知识点总结
# def wrapper(f):
# def inner(*args,**kwargs):
# print('在被装饰的函数执行之前做的事')
# res = f(*args,**kwargs)
# print('在被装饰的函数执行之后做的事')
# return res
# return inner
# @wrapper # holiday = wrapper(holiday) 这时holiday == inner
# def holiday(day):
# print('全体放假%s天'%day)
# return '好开心'
# ret = holiday(3)
# print(ret) # def outer(*args,**kwargs):
# print(args,kwargs)
# print(*args)
# def inner(*args):
# print('inner:', args)
# inner(*args)
# outer(1,2,3,4,a = 1,b = 2) # def wahaha():
# '''
# 一个打印娃哈哈的函数
# :return:
# '''
# print('娃哈哈')
# print(wahaha.__name__) # 查看字符串格式的函数名
# print(wahaha.__doc__) # document (查看函数的注释) # from functools import wraps
# def wrapper(f): # f = holiday
# @wraps(f) # 加上这句话之后, holiday 就是holiday 不是inner了
# def inner(*args,**kwargs):
# print('在被装饰的函数执行之前做的事')
# res = f(*args,**kwargs)
# print('在被装饰的函数执行之后做的事')
# return res
# return inner
# @wrapper # holiday = wrapper(holiday) 这时holiday == inner ,这时还没加上面那句话
# def holiday(day):
# print('全体放假%s天'%day)
# return '好开心'
# ret = holiday(3)
# print(holiday.__name__) # 输出inner,加了上面那句话之后输出 holiday # ---------------------------------------------------------------------------------------------------- # # 带参数的装饰器 # 500个函数
#
# import time
# FLAG = True
# def timmer_out(flag):
# '''
# 计算机函数执行时间
# :param flag:flag为真时,运行这个函数,为假时不运行
# :return:
# '''
# def timmer(func):
# def inner(*args,**kwargs):
# if FLAG:
# start_time = time.time()
# ret = func(*args,**kwargs)
# end_time = time.time()
# print(end_time - start_time)
# return ret
# else:
# ret = func(*args, **kwargs)
# return ret
# return inner
# return timmer
# @timmer_out(FLAG) # 先调用timmer_out(FLAG),返回的结果为timmer, 加了@ 之后就等于 @timmer,就等于wahaha = timmer(wahaha)
# # 上个式子等价于:
# # timmer = timmer_out(FLAG)
# #@timmer
#
# def wahaha():
# time.sleep(0.1)
# print('娃哈哈')
# @timmer_out(FLAG)
# def erguotou():
# time.sleep(0.1)
# print('二锅头')
# wahaha()
# erguotou() # 多个装饰器装饰一个函数 #
# def wrapper1(func): # func --> f
# def inner1():
# print('wrapper1,before func')
# func() # f
# print('wrapper1,after func')
# return inner1
#
# def wrapper2(func): # func --> inner1
# def inner2():
# print('wrapper2, before func')
# func() # 其实是 inner1()
# print('wrapper2, after func')
# return inner2
#
# @wrapper2 # f = wrapper2(f) --> wrapper2(inner1), 返回的inner2,故 f == inner2
# @wrapper1 # f = wrapper1(f) 返回的inner1,故 f == inner1
#
# # 先找最近的函数,wrapper2没找到, wrapper1先找的f(),然后wrapper2又找的
# def f():
# print('in f')
#
# f() # --> inner2() # ---------------------------------------------------------------------------------- #
# 三个 def wrapper1(func):
def inner1():
print('wrapper1,before func')
ret = func()
print('wrapper1,after func')
return ret
return inner1 def wrapper2(func):
def inner2():
print('wrapper2, before func')
ret = func()
print('wrapper2, after func')
return ret
return inner2 def wrapper3(func):
def inner3():
print('wrapper3, before func')
ret = func()
print('wrapper3, after func')
return ret
return inner3 @wrapper3
@wrapper2
@wrapper1
def f():
print('in f')
return '哈哈哈'
print(f()) # 记录用户的登录情况 and 计算这个函数的执行时间
python学习之老男孩python全栈第九期_day012知识点总结的更多相关文章
- python学习之老男孩python全栈第九期_day027知识点总结——反射、类的内置方法
一. 反射 ''' # isinstance class A:pass class B(A):pass a = A() print(isinstance(a,A)) # 判断对象和类的关系 print ...
- python学习之老男孩python全栈第九期_day023知识点总结——类和对象命名空间、组合
一. 类和对象命名空间类里 可以定义两种属性: 1. 静态属性 2. 动态属性 class Course: language = 'Chinese' def __init__(self, teache ...
- python学习之老男孩python全栈第九期_day019知识点总结——collections模块、时间模块、random模块、os模块、sys模块
一. collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:namedtuple.deque.Counte ...
- python学习之老男孩python全栈第九期_day017知识点总结——初识递归、算法
一. 递归函数 如果一个函数在内部调用自身本身,这个函数就是递归函数. 最大递归深度默认是997 -- python从内存角度出发做得限制(而不是程序真的报错),最大深度可以修改 def func(n ...
- python学习之老男孩python全栈第九期_day010知识点总结
def qqxing(l = []): # 可变数据类型 l.append(1) print(l)qqxing() # [1]qqxing([]) # [1]qqxing() # [1, 1]qqxi ...
- python学习之老男孩python全栈第九期_day007知识点总结
基础数据类型汇总 1. str 2. int 3. list 4. bool 5. dict (1) fromkeys Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对 ...
- python学习之老男孩python全栈第九期_day001知识点总结
1. Python2与Python3的区别: Python2:源码不标准,混乱,重复代码太多: Python3:统一标准,去除重复代码. 编码方式: python2的默认编码方式为ASCII码:pyt ...
- python学习之老男孩python全栈第九期_day014知识点总结
# 迭代器和生成器# 迭代器 # 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的# 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir ...
- python学习之老男孩python全栈第九期_day016知识点总结
'''数据类型:intbool... 数据结构:dict (python独有的)listtuple (pytho独有的)setstr''' # reverse() 反转l = [1,2,3,4,5]l ...
随机推荐
- cglib invoke 和 invokeSuper 可用的组合
在深入字节码理解invokeSuper无限循环的原因中,我们理解的cglib的原理和其中一个合理的调用方式.但是这个调用方式是基于类的,对所有实例生效.实际场景中,我们可能只是希望代理某个具体的实例, ...
- css3中那些鲜为人知但又很有用的属性
概述 这是我在写移动端页面的时候遇到的,css3中鲜为人知但又很有用的属性,记录下来,供以后开发时参考,相信对其他人也有用. tap-highlight-color 在移动端开发中,我们需要在用户轻按 ...
- C#6.0语言规范(七) 表达式
表达式是运算符和操作数的序列.本章定义了操作数和运算符的语法,求值顺序以及表达式的含义. 表达式分类 表达式分类为以下之一: 一个值.每个值都有一个关联的类型. 一个变量.每个变量都有一个关联的类型, ...
- 组件基础(非父子组件传值)—Vue学习笔记
最近几天忙着写Api去了,抽空把后面的内容下出来,然后再分享给大家web可以使用的api. 上次说了父子组件直接的传值,这次看一下非父子组件之间的传值(总线机制) 要实现非父子组件之间的传值非常重要的 ...
- 在ubuntu中我们使用sudo apt-get install 或者dpkg -i *.deb安装软件时,常常提示“有未能满足的依赖关系“,解决方法
很早之前在ubuntu安装软件时遇到的问题,今天打开ubuntu看到了,总结如下: 在ubuntu中我们使用sudo apt-get install 或者dpkg -i *.deb安装软件常常提示“有 ...
- springbootf访问静态文件资源
springboot目录结构: 网友说在springboot的配置文件中加 现在访问static目录下的jquery文件 用jquery在页面做一个弹窗 启动服务看页面效果 页面没有出现弹窗 ,连jq ...
- ajex 相关参数
1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如 ...
- Java代码调用Oracle的存储过程,存储函数和包
Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名 月薪 职位 create or ...
- 使用命令执行 sql 脚本文件
使用命令执行 sql 脚本文件 方法: 在 Windows 下使用 cmd 命令执行(或 Unix 或 Linux 控制台下)[Mysql的bin目录]\mysql –u用户名 –p密码 –D数据库名 ...
- linux TOP命令各参数详解【转载】
实时监控或查看系统资源使用情况的工具——TOP top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. 下面详细介绍它的使用方法: ( ...