笔记||Python3进阶之装饰器
# 装饰器
# 特征: 是用一个@开头的字符串
# 装饰器通常用来装饰函数、或者类的方法
# 被装饰后的函数,通常是在原有的函数基础上,会多出增加一点功能
# 一般来说装饰器本身也是一个函数
#
# def test(name):
# def test_in():
# print(name)
# return test_in
#
# func = test('peiyanan')
# func()
'''
逻辑思想:①首先把peiyanan实参传递给test函数
②在执行test函数时,又返回到test_in函数
③执行test_in函数并打印输出
'''
# =================================================================================
# 不带参数的装饰器(装饰器、被装饰函数都不带参数)
# import time
# def showTime(func):
# def wrapper():
# start = time.time()
# func()
# end = time.time()
# print('spend is {}'.format(end-start))
#
# return wrapper
#
#
#
# @showTime # foo = showTime(foo)
# def foo():
# print('foo..')
# time.sleep(3)
#
#
# foo()
'''
逻辑思想:①首先将foo函数当做参数的形式传递到showTime函数中去
②在执行showTime函数的同时,会先打印出foo函数中的
③然后又将返回给wrapper函数
④最后逕wrapper函数并打印输出
'''
# ==================================================================================
# 带参数的被装饰的函数
import time
def showTime(func):
def wrapper(x, y):
start = time.time()
func(x, y)
end = time.time()
print('spend is {}'.format(end-start))
return wrapper
@showTime # foo = showTime(foo)
def foo(x, y):
print(x+y)
time.sleep(3)
foo(4, 5)
'''
逻辑思想:①foo函数调用,执行foo函数体并打印输出
②接着showTime函数调用foo(这里foo既可以看做一个参数,也可以看做是一个函数),传递给showTime函数体
③执行showTime函数体,遇到return,又返回给了wrapper函数体
④执行wrapper函数体时,一次执行并最后输出
'''
# 使用装饰器的缺点
# 不要在装饰器之外添加逻辑功能
# 不能装饰@staticmethod或者@classmethod已经装饰过的方法
# 装饰器会对原函数的原信息进行更改
# 装饰器
# 特征: 是用一个@开头的字符串
# 装饰器通常用来装饰函数、或者类的方法
# 被装饰后的函数,通常是在原有的函数基础上,会多出增加一点功能
# 一般来说装饰器本身也是一个函数
#
# def test(name):
# def test_in():
# print(name)
# return test_in
#
# func = test('peiyanan')
# func()
'''
逻辑思想:①首先把peiyanan实参传递给test函数
②在执行test函数时,又返回到test_in函数
③执行test_in函数并打印输出
'''
# =================================================================================
# 不带参数的装饰器(装饰器、被装饰函数都不带参数)
# import time
# def showTime(func):
# def wrapper():
# start = time.time()
# func()
# end = time.time()
# print('spend is {}'.format(end-start))
#
# return wrapper
#
#
#
# @showTime # foo = showTime(foo)
# def foo():
# print('foo..')
# time.sleep(3)
#
#
# foo()
'''
逻辑思想:①首先将foo函数当做参数的形式传递到showTime函数中去
②在执行showTime函数的同时,会先打印出foo函数中的
③然后又将返回给wrapper函数
④最后逕wrapper函数并打印输出
'''
# ==================================================================================
# 带参数的被装饰的函数
import time
def showTime(func):
def wrapper(x, y):
start = time.time()
func(x, y)
end = time.time()
print('spend is {}'.format(end-start))
return wrapper
@showTime # foo = showTime(foo)
def foo(x, y):
print(x+y)
time.sleep(3)
foo(4, 5)
'''
逻辑思想:①foo函数调用,执行foo函数体并打印输出
②接着showTime函数调用foo(这里foo既可以看做一个参数,也可以看做是一个函数),传递给showTime函数体
③执行showTime函数体,遇到return,又返回给了wrapper函数体
④执行wrapper函数体时,一次执行并最后输出
'''
# 使用装饰器的缺点
# 不要在装饰器之外添加逻辑功能
# 不能装饰@staticmethod或者@classmethod已经装饰过的方法
# 装饰器会对原函数的原信息进行更改
笔记||Python3进阶之装饰器的更多相关文章
- python进阶04 装饰器、描述器、常用内置装饰器
python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...
- Python进阶(六)----装饰器
Python进阶(六)----装饰器 一丶开放封闭原则 开放原则: 增加一些额外的新功能 封闭原则: 不改变源码.以及调用方式 二丶初识装饰器 装饰器: 也可称装饰器函数,诠释开放封闭原则 ...
- TS 自学笔记(二)装饰器
TS 自学笔记(二)装饰器 本文写于 2020 年 9 月 15 日 上一篇 TS 文章已经是很久之前了.这次来讲一下 TS 的装饰器. 对于前端而言,装饰器是一个陌生的概念,但是对于 Java.C# ...
- Python之路第一课Day4--随堂笔记(迭代生成装饰器)
上节回顾: 1.集合 a.关系测试 b.去重 2.文件操作及编码 3.函数 4.局部变量和全局变量 上节回顾 本节课内容: 1.迭代器生成器 2.装饰器 3.json pickle数据序列化 4.软件 ...
- python学习笔记-(八)装饰器、生成器&迭代器
本节课程内容概览: 1.装饰器 2.列表生成式&迭代器&生成器 3.json&pickle数据序列化 1. 装饰器 1.1 定义: 本质上是个函数,功能是装饰其他函数—就是为其 ...
- python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化
1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = Fal ...
- python3 如何给装饰器传递参数
[引子] 之前写过一篇文章用来讲解装饰器(https://www.cnblogs.com/JiangLe/p/9309330.html) .那篇文章的定位是入门级的 所以也就没有讲过多的高级主题,决定 ...
- python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化
生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...
- JavaScript学习笔记(四十四) 装饰器
装饰器模式(Decorator) 在装饰器模式中,可以在运行时给一个对象动态的添加额外的功能.当和静态类打交道的时候(static classes),这可能是一个挑战.但在JavaScript中,对象 ...
随机推荐
- 201771010135 杨蓉庆AND张燕 《面对对象程序设计(java)》第十一周学习总结
1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: (2) 了解java集合框架体系组成: (3) 掌握ArrayList.LinkList两个类的用 ...
- 吴裕雄 python 人工智能——基于Mask_RCNN目标检测(2)
import os import sys import itertools import math import logging import json import re import random ...
- springboot多模块项目打war包
一.父模块配置 1,指定pakaging:pom 2,指定编译的版本:如下图: <properties> <project.build.sourceEncoding>UTF-8 ...
- 蚁人cp数
可怜的蚁人进入量子领域后,黄蜂女被灭霸的一个响指带走,导致可怜的蚁人困在了量子领域,为了生存,他们开始建造自己家园. 蚁人为了方便在这里生存,他们建造了自己火车站.某车站有N个人上车,其中M对是情侣, ...
- 【CSS属性#1】
" 目录 一.宽和高 二.字体属性 1. 文字字体 font-famlly 2. 字体大小 font-size 3. 字重(粗细) font-weight 4. 文本颜色 color 三.字 ...
- 使用ssh 初始化git一个空java工程
1:进入git 目录 cd /home/git/repo/ 2:创建一个java工程名 mkdir qft-payment 3:进入工程 cd qft-payment/ 4:初始化空工程 git - ...
- dubbo-admin监控台的搭建
一.dubbo-admin dubbo-admin是dubbo的控制台web程序,可以利用浏览器对dubbo进行性能监控.服务治理.降级.分组以及一些参数的设置.2.6版本及以前打包后是一个war包, ...
- C语言:使用递归解决汉诺塔问题。
//汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...
- 小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- MockMVC - 基于RESTful风格的Springboot,SpringMVC的测试
MockMVC - 基于RESTful风格的SpringMVC的测试 对于前后端分离的项目而言,无法直接从前端静态代码中测试接口的正确性,因此可以通过MockMVC来模拟HTTP请求.基于RESTfu ...