博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day20 装饰器
阅读量:4538 次
发布时间:2019-06-08

本文共 1652 字,大约阅读时间需要 5 分钟。

###装饰器

本质就是函数,为其他函数添加附加功能

原则:

1.不修改被修饰函数的源代码

2.不修改被修饰函数的调用方式

 

装饰器=高阶函数+函数嵌套+闭包

 

高阶函数定义:

1.函数接收的参数是一个函数名

2.函数的返回值是一个函数名

3.满足上述条件任意一个,都可称之为高阶函数

 

装饰器的架子:

def timmer(func):

      def wrapper():

            func()

      return wrapper

 

@timmer 就相当于 test=timmer(test)#放在要修饰的函数前

timmer为已知装饰器

执行test()即执行wrapper()和func()

 

装饰器加返回值:

def timmer(func):

      def wrapper():

            res=func()

            return res #此处返回被装饰函数的返回值

      return wrapper

 

加参数

def timmer(func):

      def wrapper(*args,**kwargs):

            res=func(*args,**kwargs)

            return res 

      return wrapper

 

*args 用来将参数打包成tuple给函数体调用

**kwargs 打包关键字参数成dict给函数体调用

注意:参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。

test1(1,2,3,4,name=3)等同于test1(*(1,2,3,4),**{‘name’:’alex’}

 

装饰器流程

def timmer(func):

      def wrapper(*args,**kwargs):

            pass ‘’’加装饰器的功能’’’

            res=func(*args,**kwargs)

            return res 

      return wrapper

@timmer

def test():

      pass

test() #此处为return返回wrapper,test()相当于wrapper所以流程调用wrapper()函数

###查看装饰器流程

debug

 

###示例添加认证功能

def auth_func(func):

    def wrapper(*args,**kwargs):

        username = input("username").strip()

        passwd = input("passwd").strip()

        if username == "xyy" and passwd == '123':

            res = func(*args,**kwargs)

            return res  # 此处返回被装饰函数的返回值

        else:

            print("用户名或密码错误")

    return wrapper

 

@auth_func

def index():

    print("welcome to pk")

    return 345

index()

###装饰器带参数

 

###解压序列

a,b.c = (1,2,3)

a,b,c = ‘hel’

li = [1,4,6,8,4,8,3,9,4,89,453,7,83,4]

a,*_,c = li #取li中第一个和最后一个值

a,*d, c = li #则d为[4,6,8,4,8,3,9,4,89,453,7,83]

a, c =(1,4)

a, b = b, a #交换a, b的值

 

strip() 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列

 

匿名函数执行完一次就不会在内存中出现

 

交 &

并 |

差 -

异或 ^

 

在列表中插入元素, list.insert(位置,元素)或list[位置:位置]=[元素,元素……]

list[0:0]=[‘xyy’]在0位置插入,冒号前后位置相同时,在原列表指定位置前插入指定元素

 

转载于:https://www.cnblogs.com/xuwinwin/p/11340178.html

你可能感兴趣的文章
JavaScript中的变量
查看>>
iptables基本原理和规则配置
查看>>
ArcGIS JS 学习笔记4 实现地图联动
查看>>
使用分层实现业务处理
查看>>
Microsoft Windows平台的NoSQL数据存储引擎
查看>>
Ubuntu系统Linux编译osg库
查看>>
Linux学习笔记 -- 系统目录结构
查看>>
[转载]ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件...
查看>>
将数组排序组成最小的整数
查看>>
sqlserver学习--1(登陆,时间函数,查看表结构,查看建表语句,IDENTITY() 函数,查询表名称,查询表结构)...
查看>>
MYSQL 日期函数
查看>>
Oracle触发器之替代触发器
查看>>
Android 开源控件与常用开发框架开发工具类
查看>>
元素定位的八大法则
查看>>
Sublime Text 3 使用小记
查看>>
总结Pycharm里面常用的快捷键
查看>>
util.promisify 的那些事儿
查看>>
配置phpstudy+phpstorm+xdebug环境
查看>>
BZOJ 1079 [SCOI2008]着色方案
查看>>
[Win8.1系统]双系统
查看>>