Python之路,Day4 - Python基础4

Posted eaoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路,Day4 - Python基础4相关的知识,希望对你有一定的参考价值。

本节内容

  1. 迭代器&生成器
  2. 装饰器
  3. Json & pickle 数据序列化
  4. 软件目录结构规范
  5. 作业:ATM项目开发

 

1.装饰器(语法糖)

定义:本质是函数,(装饰其他函数),就是为其他函数添加附加功能

原则:

  1. 不能修改被装饰函数的源代码
  2. 不能修改被装饰函数的调用方式

实现装饰器“知识”储备:

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
View Code

因此,可以得到在不改变调用方式的情况下的做法

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的主要内容,如果未能解决你的问题,请参考以下文章

Python之路,Day4

python学习之路

python之路-Day4

python攻克之路day4

Python之路day4

python学习之路-day4.1