python装饰器

Python 手册目录

喜夏-厌秋 提交于 2019-11-30 02:35:44
Python常用单词 Python 第一章 Python基础 Python简介 Python安装 Python入门 第二章 Python运算符 Pycharm使用 While 循环 格式化输出 常用运算符 初识—编码 第三章 Python基础数据类型一 整型和布尔值 字符串 第四章 Python基础数据类型二 列表 元组 第五章 Python 基础数据类型三 字典 第六章 小数据池 小数据池 深浅拷贝 集合 第七章 Python基础数据类型补充 数据类型方法 — 补充 以后会编程会遇到的坑 编码 — 进阶 第八章 Python基础文件操作 读操作 写操作 +模式 其他操作 第九章 Python基础初识函数 函数初识 函数的参数 第十章 Python基础函数进阶 函数的动态参数 函数的名称空间 函数的嵌套及gloabal、nonlocal 第十一章 Python基础迭代器 函数名的使用及f-strings使用 迭代器 第十二章 Python基础生成器 生成器 推导式 内置函数一 第十三章 内置函数二 内置函数二 闭包 第十四章 Python基础装饰器 装饰器介绍 标准版装饰器 第十五章 装饰器进阶及递归 带参数装饰器 多个装饰器装饰一个函数 递归 第十六章 自定义模块 模块的简介 import from xxx import xxx 导入顺序 time模块 datetime模块

python装饰器

大憨熊 提交于 2019-11-30 00:38:09
最近一直在学习python,关于装饰器这一点始始终搞的不是太明白在此记录一笔。 装饰器定义:装饰器用来给其它函数添加新功能,装饰其它函数。 装饰器原则:开放封闭原则,不能修改被修饰函数的源代码,且不能修改原有函数的调用方式。 装饰器生产场景:添加新的功能,已经上线的代码,在不修改原有的代码,以及原有函数的调用方式的情况下添加新的功能。 装饰器使用的知识点:   1)高阶函数   2)嵌套函数   3)高阶函数 + 嵌套函数 = 装饰器 先介绍下高阶函数: 高阶函数就是把一个函数当作实参传入另外一个函数 例1: def a(): print('my name is a') def b(func): print(func) func() 调用:b(a) 输出:<function a at 0x0000024E3CB83400> #等于b函数中的print(func),打印函数a的内存地址    my name is a #等于b函数中的func()此时的func已经被a函数替换,调用fucn()也就是在调用a() 例2: def a(): print('my name is a') def b(func): print(func) return func 调用:a = b(a) #a = func 在把b函数调用的a函数返回的内存地址,赋值给a a()

python之路——迭代器和生成器

牧云@^-^@ 提交于 2019-11-29 21:31:19
阅读目录   楔子   python中的for循环   可迭代协议   迭代器协议   为什么要有for循环   初识生成器   生成器函数   列表推导式和生成器表达式   本章小结   生成器相关的面试题 返回顶部 楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几种方式? 首先,我可以通过索引取值l[0],其次我们是不是还可以用for循环来取值呀? 你有没有仔细思考过,用索引取值和for循环取值是有着微妙区别的。 如果用索引取值,你可以取到任意位置的值,前提是你要知道这个值在什么位置。 如果用for循环来取值,我们把每一个值都取到,不需要关心每一个值的位置,因为只能顺序的取值,并不能跳过任何一个直接去取其他位置的值。 但你有没有想过,我们为什么可以使用for循环来取值? for循环内部是怎么工作的呢? 迭代器 返回顶部 python中的for循环 要了解for循环是怎么回事儿,咱们还是要从代码的角度出发。 首先,我们对一个列表进行for循环。 for i in [1,2,3,4]: print(i) 上面这段代码肯定是没有问题的,但是我们换一种情况,来循环一个数字1234试试 for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py",

python之路——装饰器函数

拜拜、爱过 提交于 2019-11-29 21:31:19
阅读目录   楔子   装饰器的形成过程   开放封闭原则   谈装饰器主要功能和装饰器固定结构   带参数的装饰器   多个装饰器装饰一个函数 返回顶部 楔子 作为一个会写函数的python开发,我们从今天开始要去公司上班了。写了一个函数,就交给其他开发用了。 def func1(): print('in func1') 季度末,公司的领导要给大家发绩效奖金了,就提议对这段日子所有人开发的成果进行审核,审核的标准是什么呢?就是统计每个函数的执行时间。 这个时候你要怎么做呀? 你一想,这好办,把函数一改: import time def func1(): start = time.time() print('in func1') print(time.time() - start) func1() 来公司半年,写了2000+函数,挨个改一遍,1个礼拜过去了,等领导审核完,再挨个给删了。。。又1个礼拜过去了。。。这是不是很闹心? 你觉得不行,不能让自己费劲儿,告诉所有开发,现在你们都在自己原本的代码上加上一句计算时间的语句? import time def func1(): print('in func1') start = time.time() func1() print(time.time() - start) 还是不行,因为这样对于开发同事来讲实在是太麻烦了。 那怎么办呢

python 装饰器中的@wraps

走远了吗. 提交于 2019-11-29 19:19:13
就是将 被修饰的函数(wrapped) 的一些属性值赋值给 修饰器函数(wrapper) ,最终让属性的显示更符合我们的直觉。 详细的解释为 https://segmentfault.com/a/1190000009398663 来源: https://blog.csdn.net/qq_35899407/article/details/100896289

2、python深入装饰器

别说谁变了你拦得住时间么 提交于 2019-11-29 19:13:23
装饰器两个重要的概念: ① ‘@’ 语法糖 ② 在不改变原函数代码的基础上,在执行前后进行定制操作 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上。和这个函数绑定在一起。在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函数做为参数传入它头顶上这顶帽子,这顶帽子我们称之为 装饰器 ,返回值是函数对象。 使用场景: 应用场景: Flask : 路由、before_request、after_request Django: csrf、缓存、内置用户登录认证 functools:缓存、warper 在一次的面试中,被面试官问过这样的两个问题: 1、你都用过装饰器实现过什么样的功能? 2、如何写一个可以传参的装饰器? 01. Hello,装饰器 装饰器的使用方法很固定 先定义一个装饰器(帽子) 再定义你的业务函数或者类(人) 最后把这装饰器(帽子)扣在这个函数(人)头上 就像下面这样子 def decorator(func): # 其中func传入要调用装饰器函数, 保留函数原有功能 def wrapper(*args, **kwargs): # wrapper 表示原函数被封装 *args, **kw 可传入多个参数 if datetime.datetime.now().year == 2020: # 新的业务逻辑 print(datetime

python装饰器

假装没事ソ 提交于 2019-11-29 16:46:53
装饰器原理 闭包及性质 函数的嵌套 内嵌函数可访问外层函数的变量 装饰器实现 函数作为参数传递到装饰函数中 利用闭包特性,对需装饰的函数进行装饰 返回装饰结束的函数 “ @ ”为装饰器的语法糖 普通装饰器 适用于给已有的代码添加一点新功能 有一个回家函数 go_home def go_home(): print("回家了!!!") go_home() >>>回家了!!! 在回家之前去搞个苹果 def get_apple(func): def f(): print("买了个苹果!") func() return f @get_apple def go_home(): print("回家了!!!") go_home() >>>买了个苹果! >>>回家了!!! 装饰带返回值的函数 有一个回家函数 go_home def go_home(): return "回家了!!!" ret = go_home() print(ret) >>>回家了!!! 在回家之前去搞个苹果 def get_apple(func): def f(): print("买了个苹果!") ret = func() return ret return f @get_apple def go_home(): return "回家了!!!" ret = go_home() print(ret) >>>买了个苹果! >>

python装饰器

谁都会走 提交于 2019-11-29 14:06:46
#普通装饰器基本格式 def wrapper(func): def inner(): pass return func() return inner def func(): pass func = wrapper(func) func() #带参数装饰器基本格式 def w(counter): def wrapper(func): def inner(*args,**keargs): lis = [] for i in range(0,counter): a=func(*args,**keargs) lis.append(a) return lis return inner return wrapper def func(*args,**keargs): return 8 0.装饰器补充 常见的模块(hashlib,random,getpass,time) 默认值参数尽量是不可变数据类型 !可变数据类型有坑!**** def func(a,b=[]): b.append(a) return b l1 = func(1) l2 = func(2,[11,22]) l3 = func(3) # [1,3] [11,22,2] [1,3] print(l1,l2,l3) #最后输出的时候l1与l3均已运行,b=[1,3] def func(a,b=[]): b.append(a)

python 函数

随声附和 提交于 2019-11-29 13:58:46
函数 简介 ​ 函数是组织好的,可重复使用的,用来实现,单一或相关联的功能 ​ 函数能提高模块的利用行,和代码的重复利用率以及冗余,其实你已经使用了很多的Python函数,比如print()。 ​ 但是你也可以自己创建函数,这种叫做自定义函数 函数规则 函数代码块必须以def 关键字开头,后面为函数标识符名以及() 任何传入的参数和自定变量必须放在圆括号中间。圆括号之间可以用来定义参数 函数的第一行语句可以选择性的使用注释字符来表明函数的作用及说明 函数的内容以冒号起始,并且必须缩进 return [表达式] 结束函数,选择性的返回一个值给调用该函数方。不带表达式的函数默认会返回 None 语法 #语法 def functionname( parameters ): "函数_文档字符串" function_suite return [expression] #实例 def printme( str ): "打印传入的字符串到标准显示设备上" print(str) return 默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。 函数调用 定义一个函数只能给函数一个名称,指定函数里包含的参数,和代码块结构 函数基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从python提示符执行 #!/usr/bin/python # -*- coding: UTF-8 -

python笔记之中缀语法和管道实现

家住魔仙堡 提交于 2019-11-29 10:42:59
python笔记之中缀语法和管道实现 你知道什么是中缀语法吗?你知道python中的中缀操作是什么吗?那你知道操作python也是可以像unix的管道符一样方便吗?那么,废话不说了,直接上代码。 class Pipe( object ): def __init__ ( self , function): self .function = function def __ror__ ( self , other): return self .function(other) def __call__ ( self , * args, ** kwargs): return Pipe( lambda x: self .function(x, * args, ** kwargs)) Julien Palard 大神十分的抱歉,直接附上了您的代码,希望您不要介意。 在上面的代码中__ror__就是我们python中看到的或操作符,在这里代码重载了或操作符,然后把它变成我们梦寐以求的管道操作符,十分的犀利,我很喜欢。我实在是忍不住想发表一下我的见解,谈谈我对这段代码的认识,如有错误,请扔鸡蛋。 一个例子 @Pipe def take(iterable, qte): "Yield qte of elements in the given iterable." for item in iterable