Python之路,Day4 - Python基础4
Posted eaoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路,Day4 - Python基础4相关的知识,希望对你有一定的参考价值。
本节内容
- 迭代器&生成器
- 装饰器
- Json & pickle 数据序列化
- 软件目录结构规范
- 作业:ATM项目开发
1.装饰器(语法糖)
定义:本质是函数,(装饰其他函数),就是为其他函数添加附加功能
原则:
- 不能修改被装饰函数的源代码
- 不能修改被装饰函数的调用方式
实现装饰器“知识”储备:
1.函数即“变量”
2.高阶函数
a.把一个函数名当作实参传给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
def bar(): print("in the bar") def test1(func): #test1(bar) print(func) func() #相当于bar() test1(bar) #此时相当于 func=bar --------输出-------- <function bar at 0x05604300> in the bar
1 import time 2 def bar(): 3 time.sleep(3) 4 print("in the bar") 5 def deco(func): 6 start_time=time.time() 7 func() 8 stop_time=time.time() 9 print("the func run time is %s"%(stop_time-start_time)) 10 deco(bar) #但是其实这个例子不合适,因为改变了调用方式 11 #bar() 这才是原来的调用方式 12 13 ------输出----- 14 in the bar 15 the func run time is 3.0007259845733643
b.返回值包含函数名(不修改函数调用方式)
1 def bar(): 2 print("in the bar") 3 def deco(func): #func=bar 4 print(func) #打印bar的内存地址 5 return func #再返回bar的内存地址 6 #内存地址+()就能运行 7 8 deco(bar) #把内存地址即函数名传给deco 9 print("----分割线---") 10 print(deco(bar)) #把return返回值打印出来 11 print("------||------") 12 deco(bar()) #把返回值传给deco,不符合高阶函数的定义 13 14 ----------输出------ 15 <function bar at 0x058C4228> 16 ----分割线--- 17 <function bar at 0x058C4228> 18 <function bar at 0x058C4228> 19 ------||------ 20 in the bar 21 None
因此,可以得到在不改变调用方式的情况下的做法
def bar(): print("in the bar") def deco(func): #func=bar print(func) #打印bar的内存地址 return func #再返回bar的内存地址 #内存地址+()就能运行 bar=deco(bar) #将return返回的值赋值给bar bar() #此时bar为内存地址,所以bar+()就能运行bar这个函数 ------输出----- <function bar at 0x05814150> in the bar
3.嵌套函数
定义:在函数体内,用def去声明一个新的函数。而不是去调用他
def foo(): print("in the foo") def bar(): print("in the bar/") bar() #局部变量只能在局部函数内调用 foo() ‘‘‘ def foo(): bar() #这种是直接调用 ‘‘‘ -------输出---- in the foo in the bar/
4.高阶函数+嵌套函数==》装饰器
匿名函数
def plus(n): #函数名plus return n+1 plus2 = lambda x:x+1 #没有函数名字,只有变量名 #但是两者得到的结果是一样的 #lambda x:x+1 起了个名字叫plus2,相当于def plus2(x)
以上是关于Python之路,Day4 - Python基础4的主要内容,如果未能解决你的问题,请参考以下文章