python装饰器

Python基础知识总结笔记(四)函数

眉间皱痕 提交于 2020-02-22 14:37:48
Python基础知识总结笔记(四)函数 python中的函数 函数中的参数 变量作用域 偏函数PFA 递归函数 高阶函数 BIFs中的高阶函数 匿名函数lambda 闭包Closure 装饰器Decorator 函数式编程Functional Programming 每天都有程序员定时讲解Python技术,分享一些学习的方法和需要留意的小细节,要资料加 624440745 1. python中的函数 ■ 函数的意义: ■1.对输入进行变换映射后输出 ,可以进行反复调用。以函数名对代码块进行封装 ■2.过程化 VS 结构化 ■ 函数的创建及结构: ■定义函数名:def foo1(num): ■参数:num ■函数体 ■返回 □有无返回: 有返回值:return返回的是对象,(如返回对象数>1返回元组)。且返回的为最后的一个return值。 无返回值 :无返回值或者return后为空。 print可以有很多,但是return只有一个。 □return与yield的区别: print:不返回任何的函数 return 结束函数,返回值,当函数被调用时,遇到结尾或return时就准备结束了。只显示最后一个return的值。 yield:丢出一个数,对象变成了生成器–记录当前运行到哪里了。 #函数的意义 n=5 for i in range(n): print(i) #

Python基础知识总结笔记(四)函数

一个人想着一个人 提交于 2020-02-21 19:33:26
Python基础知识总结笔记(四)函数 python中的函数 函数中的参数 变量作用域 偏函数PFA 递归函数 高阶函数 BIFs中的高阶函数 匿名函数lambda 闭包Closure 装饰器Decorator 函数式编程Functional Programming 1. python中的函数 ■ 函数的意义: ■1.对输入进行变换映射后输出 ,可以进行反复调用。以函数名对代码块进行封装 ■2.过程化 VS 结构化 ■ 函数的创建及结构: ■定义函数名:def foo1(num): ■参数:num ■函数体 ■返回 □有无返回: 有返回值:return返回的是对象,(如返回对象数>1返回元组)。且返回的为最后的一个return值。 无返回值 :无返回值或者return后为空。 print可以有很多,但是return只有一个。 □return与yield的区别: print:不返回任何的函数 return 结束函数,返回值,当函数被调用时,遇到结尾或return时就准备结束了。只显示最后一个return的值。 yield:丢出一个数,对象变成了生成器–记录当前运行到哪里了。 #函数的意义 n=5 for i in range(n): print(i) # 以函数名对以上代码块进行封装 def foo(num): #函数名foo; 参数num for i in range(num):

Python语言高频重点汇总

我怕爱的太早我们不能终老 提交于 2020-02-20 17:55:37
Python语言高频重点汇总 GitHub面试宝典仓库——点这里跳转 文章目录 Python语言高频重点汇总 **GitHub面试宝典仓库——点这里跳转** 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10. args和**kwargs 11. 面向切面编程AOP和装饰器 12. 鸭子类型 13. Python中的重载 14. 新式类和旧式类 15. `__new__`和`__init__`的区别 16. Python中的作用域 17. GIL线程全局锁 18. 协程 19. 闭包 20. lambda匿名函数 21. Python中函数式编程 22. Python中的拷贝 23. Python的垃圾回收机制 24. List 25. Python中的is 26. read, readline和readlines 27. Python2和Python3的区别 28. super init 1. 函数-传参 回到顶部 在python中,给一个函数传递参数其实是把实参这个变量对应的地址复制了一份,然后把复制的这个地址传递给函数中局部变量形参

Python装饰器

匆匆过客 提交于 2020-02-17 07:40:18
Python中的装饰器的概念经常会让人搞得一头雾水,所以今天就好好来分析一下python中的装饰器. 先看一个简单的装饰器用法: 1 def decorator(func): 2 print("this is wrapper") 3 4 def wrapper(): 5 func() 6 7 return wrapper 8 9 10 @decorator 11 def func(): 12 print('this is func') 13 14 # func() 15 # print(func.__name__) 运行一下上述代码,看看输出.再把14,15行的注释放开,看看输出. 我们发现当14,15行注释掉时,输出this is wrapper。 15行注释放开,你会发现先func()的名字变成了wrapper。 @其实就是python中的一个语法糖.装饰器的本质以上述代码为例: @decorator def func(): print('this is func') 其实解释器执行了这么一句:func = decorator(func).这就是装饰器最本质最核心的东西了. func作为参数传递给decorator,decorator的返回值是wrapper(),赋给func. 就这样被修饰的函数func其实已经变成了另一个函数wrapper了 . 下面我们就来看看几个例子:

Python 中的装饰器

情到浓时终转凉″ 提交于 2020-02-17 07:37:12
说到装饰器是我们每个学Python人中的心痛。 1.闭包 学习装饰器首先我们先学习闭包: 闭包条件    1 在一个外函数中定义了一个内函数。 2 内函数里使用了外函数的临时变量。 3 并且外函数的返回值是内函数的引用(即函数名)。 闭包的定义 闭包的概念就是当我们在函数内定义一个函数时,这个内部函数使用了外部函数的临时变量,且外部函数的返回值是内部函数的引用时,我们称之为闭包。 出现的背景 一般情况下,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。 闭包的基本结构: def func1(msg): #外函数 name="xiao" def inner(): #内函数 na = name # 使用外函数的变量 nb = msg print(inner.__closure__) print(inner.__closure__[0].cell_contents) print(inner.__closure__[1].cell_contents) return inner #返回内函数的引用 f=func1(123) f() #判断函数是不是闭包函数用__closure__方法 如果是闭包函数就是返回一个元组包含

python装饰器

旧巷老猫 提交于 2020-02-17 07:36:27
一 什么是装饰器? 简单地可以把装饰器理解为给函数增加扩展功能的函数,也就是说相当于在函数的运行过程中做些处理,且不影响函数原来的功能。 二 装饰器有什么用? 我们写了一堆函数,现在需要增加一项扩展功能,比如,在运行函数前,对函数进行日志统计,这样我们就可以写一个装饰器来解决问题。 也许大家会疑问,我们为什么不在原来函数中进行修改,第一,既然是扩展功能,我们可能不希望扩展功能影响原来的函数,通过装饰器,我们就没有必要将扩展工能的代码写入原来的函数代码里面,第二,装饰器也可以实现代码重用的目的。下面,我们将一步步创建一个python的装饰器。 三 一步步创建一个装饰器 1. 先介绍下python的函数对象 python的函数是一个对象,可以赋值给变量,所以通过变量也能调用该函数 In [1]: def hello(): ...: print("hello,world") ...: In [2]: f = hello In [3]: f() hello,world 函数对象也有__name__等一些属性 In [4]: f.__name__ Out[4]: 'hello' In [5]: hello.__name__ Out[5]: 'hello' 2. 我们就以给函数增加一个统计函数运行时间的功能为例子创建一个装饰器 创建一个简单的函数myfunc import time def

python装饰器

六眼飞鱼酱① 提交于 2020-02-17 00:06:44
装饰器:给已有函数增加额外功能的函数,它本质上就是一个闭包函数。 在不改变已有函数源代码及调用方式的前提下,对已有函数进行功能的扩展。 特点: 不修改已有函数的源代码 不修改已有函数的调用方式 给已有函数增加额外的功能 # 装饰器的基本雏形 # def decorator(fn): # fn:目标函数. # def inner(): # print('''执行函数之前''') # fn() # 执行被装饰的函数 # print('''执行函数之后''') # return inner # 添加一个登录验证的功能 def check ( fn ) : def inner ( ) : print ( "请先登录...." ) fn ( ) return inner def comment ( ) : print ( "发表评论" ) def check_out ( fn ) : def inner ( ) : # 先执行检测代码 print ( "检测用户是否合法登录........" ) fn ( ) return inner # 语法糖写法 # 修饰 @check_out 等价于 work = check_out(work) @check_out def work ( ) : print ( "正常工作" ) work ( ) # 使用装饰器来装饰函数 comment =

Python—装饰器函数

核能气质少年 提交于 2020-02-15 23:53:30
楔子 作为一个会写函数的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) 还是不行,因为这样对于开发同事来讲实在是太麻烦了。 那怎么办呢?你灵机一动,写了一个timer函数。。。 import time def timer(func): start = time.time() func()

Python装饰器高级用法

邮差的信 提交于 2020-02-15 10:41:17
在 Python 中, 装饰器 一般用来修饰函数,实现公共功能,达到代码复用的目的。在函数定义前加上 @xxxx ,然后函数就注入了某些行为,很神奇!然而,这只是 语法糖 而已。 场景 假设,有一些工作函数,用来对数据做不同的处理: def work_bar(data): pass def work_foo(data): pass 我们想在函数调用前/后输出日志,怎么办? 傻瓜解法 logging.info('begin call work_bar') work_bar(1) logging.info('call work_bar done') 如果有多处代码调用呢?想想就怕! 函数包装 傻瓜解法无非是有太多代码冗余,每次函数调用都要写一遍 logging 。可以把这部分冗余逻辑封装到一个新函数里: def smart_work_bar(data): logging.info('begin call: work_bar') work_bar(data) logging.info('call doen: work_bar') 这样,每次调用 smart_work_bar 即可: smart_work_bar(1) # ... smart_work_bar(some_data) 通用闭包 看上去挺完美……然而,当 work_foo 也有同样的需要时,还要再实现一遍 smart_work

python笔记18(复习)

点点圈 提交于 2020-02-14 23:32:32
今日内容 复习 内容详细 1.Python入门 1.1 环境的搭建 mac系统上搭建python环境。 环境变量的作用:方便在命令行(终端)执行可执行程序,将可执行程序所在的目录添加到环境变量,那么以后无需再输入路径。 1.2 变量命名 变量 name = 'alex' 全局变量 NAME = "oldboy" 函数 def func_list(): pass 常量 不允许修改的值,Python中执行约定。 1.3 运算符 v = 1 or 2 v = 0 or 2 v = 1 and 2 v = 0 and 2 val = v if v else 666 val = v or 666 # 源码 is和==的区别? 1.4 数据类型 int 整型 其他进制转换十进制 int('0b11011',base=2) int / long 除法 bool 0 None 空 str,字符串类型,一般用于内存中做数据操作。 v = 'alex' # unicode编码存储在内存。 bytes,字节类型,一般用于数据存储和网络传输。 v = 'alex'.encode('utf-8') # 将字符串转换成字节(由unicode编码转换为utf-8编码) v = 'alex'.encode('gbk') # 将字符串转换成字节(由unicode编码转换为gbk编码) list tuple dict