python之各种装饰器的使用
"""
装饰器,带参数的装饰器,类的装饰器
判断是否为可迭代的
from collections import Iterable
print(isinstance([1,2,3],Iterable))
"""
# 1、简单的装饰器
def debug(func):
def wrap():
print(f'debug:func name is {func.__name__}')
return func()
return wrap
@debug
def calculate():
return 1+2
print(calculate())
# 2、装饰器带参数,先接受的是参数,后接受的是函数
def debug(parameter):
def wrapper(func):
def wrap():
print(f'debug:func name is {func.__name__}')
print(f'debug:func parameter is {parameter}')
return func()
return wrap
return wrapper
@debug('testdata')
def calculate():
return 1+2
print(calculate())
# 3、装饰带参数的函数,需要将参数给定义的wrap
def debug(func):
def wrap(a, b):
print(f'debug:func name is {func.__name__}')
return func(a, b)
return wrap
@debug
def calculate(a,b):
return a+b
print(calculate(1,2))
"""
函数修饰函数
4、装饰器带参数,同时装饰的函数也带参数
"""
def debug(parameter):
def wrapper(func):
def wrap(c, d):
print(f'debug:func name is {www.shengchangyule.net func.__name__}')
print(f'debug:func parameter is {parameter}')
return func(c, d)
return wrap
return wrapper
@debug('data')
def calculate(c, d):
return c*d
print(calculate(5,7))
"""
函数修饰类
5、带参数的函数装饰器 装饰 带参数的类
"""
def debug(parameter):
def inner(func):
def wrap(a,b):
print("class name:www.yongxin7.cn/", func.__name__)
print("genrator parameter is:", parameter)
return func(a,b)
return wrap
return inner
@debug('get')
class Calculate(object):
def __init__(self,a,b):
self.a = a
self.b = b
def cal(self):
num = self.a + self.b
return num
def sal(self):
cnum = self.a * self.b
return cnum
c = Calculate(3,4)
print(c.cal())
"""
类装饰函数
6,带参数的类装饰器 修饰 带参数的函数
ini里面接受的是装饰器的参数,如果无参数则接受的是函数名
"""
class Debug(object):
def __init__(self,parameter):
self.parameter www.365soke.com= parameter
def __call__(self, func):
def wrap(a,b):
print('function name is', func.__name__)
print('debug parameter is', self.parameter)
return func(a,b)
return wrap
@Debug('post')
def calculate(a,b):
c = a * b
return c
print(calculate(2,5))
"""
类装饰类
7 带参数的类装饰器 装饰 带参数的类
"""
class Debug(object):
def __init__(self, parameter):
self.parameter = parameter
def __call__(self, func):
def wraps(a,b):
print('function name www.shengchanyule.com is', func.__name__)
print('debug parameter is', self.parameter)
return func(a,b)
return wraps
@Debug('get')
class Calculate(object):
def __init__(self,a,b):
self.a = a
self.b = b
def cal(self):
num = self.a + self.b * self.a
return num
c = Calculate(5,3)
print(c.cal())
python之各种装饰器的使用的更多相关文章
- python高级之装饰器
python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函数的定义: 满足下面两个条件之 ...
- [python基础]关于装饰器
在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...
- python笔记 - day4-之装饰器
python笔记 - day4-之装饰器 需求: 给f1~f100增加个log: def outer(): #定义增加的log print("log") ...
- Python深入05 装饰器
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...
- Day04 - Python 迭代器、装饰器、软件开发规范
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
- Noah的学习笔记之Python篇:装饰器
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- 第二篇:python高级之装饰器
python高级之装饰器 python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函 ...
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- Python进阶之装饰器
函数也是对象 要理解Python装饰器,首先要明白在Python中,函数也是一种对象,因此可以把定义函数时的函数名看作是函数对象的一个引用.既然是引用,因此可以将函数赋值给一个变量,也可以把函数作为一 ...
- Python的property装饰器的基本用法
Python的@property装饰器用来把一个类的方法变成类的属性调用,然后@property本身又创建了另一个装饰器,用一个方法给属性赋值.下面是在类中使用了@property后,设置类的读写属性 ...
随机推荐
- Spring Boot 中使用 @Transactional 注解配置事务管理
事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP ...
- RabbitMQ防止消息丢失
转载请注明出处 0.目录 RabbitMQ-从基础到实战(1)— Hello RabbitMQ RabbitMQ-从基础到实战(3)— 消息的交换 1.简介 RabbitMQ中,消息丢失可以简单的分为 ...
- Hive简单编程实践-词频统计
一.使用MapReduce的方式进行词频统计 (1)在HDFS用户目录下创建input文件夹 hdfs dfs -mkdir input 注意:林子雨老师的博客(http://dblab.xmu.ed ...
- asp.net core前后端分离
陆陆续续的看了两个礼拜的前端知识,把vue+vue-router+axios的知识撸了一遍,本来想加个element-ui来实现一下前后端分离,实施的时候却遇到了很多的坑.我本身不在一个软件开发公司上 ...
- centos 6.5 查看时区和设置时区
centos6.x 和centos7.x在时区方面有点差距,本文是针对centos6.x进行介绍. 其实在我的一个博文里,在安装系统的时候就可以进行时区的设置,本文介绍的是用命令进行时区查看和设置. ...
- Some beautiful Progress Bars in WPF
1.Better WPF Circular Progress Bar 2.Bending the WPF ProgressBar 3.A CIRCULAR PROGRESSBAR STYLE USIN ...
- 老男孩python学习自修第十三天【md5加密】
示例代码如下: hashlib_test.py #!/usr/bin/env python # _*_ coding:UTF-8 _*_ import hashlib def genPasswd(na ...
- 老男孩python学习自修第二十一天【socket】
1. 使用python编写一个静态的web服务器,能够处理静态页面的http请求 原理: a. 使用socket进行服务端和浏览器之间的通信 b. 使用多线程处理多个客户端浏览器的请求 c. 解析用户 ...
- Bootstrap之响应式导航栏
代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8 ...
- Appium之编写H5应用测试脚本(切换到Webview)
App使用H5编写,默认方式找不到元素.启动后获取所有上下文,找到webivew_xxxx的,然后进行切换. 源码: package MyAppium; import io.appium.java_c ...