码迷,mamicode.com
首页 > 编程语言 > 详细

Python_day4 装饰器,模块倒入,包的导入

时间:2017-02-17 09:50:49      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:and   实现   mil   python   turn   函数名   str   lex   16px   

一.装饰器

1.什么是装饰器.

  装饰器即函数

  装饰即修饰,意指为其他函数添加新功能

  装饰器定义:本质就是函数,功能是为其他函数添加新功能

 

2.装饰器需要遵循的原则.

  1.不修改被装饰函数的源代码(开放封闭原则)

  2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式

 

3.装饰器的实现本质.

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

 

4.高阶函数

  高阶函数定义:
  1.函数接收的参数是一个函数名

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

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

  高阶函数示范:

  def foo():
      print(我的函数名作为参数传给高阶函数)
  def gao_jie1(func):
      print(我就是高阶函数1,我接收的参数名是%s‘ %func)
      func()

  def gao_jie2(func):
      print(我就是高阶函数2,我的返回值是%s‘ %func)
      return func
  
  gao_jie1(foo)
  gao_jie2(foo)

   把函数当做参数传给高阶函数

  #高阶函数应用1:把函数当做参数传给高阶函数
  import time
  def foo():
      print(from the foo)
  
  def timmer(func):
      start_time=time.time()
      func()
      stop_time=time.time()
      print(函数%s 运行时间是%s‘ %(func,stop_time-start_time))
  timmer(foo)
  #总结:我们确实为函数foo增加了foo运行时间的功能,但是foo原来的执行方式是foo(),
     现在我们需要调用高阶函数timmer(foo),改变了函数的调用方式

   函数返回值是函数名:

  #高阶函数应用2:把函数名当做参数传给高阶函数,高阶函数直接返回函数名
  import time
  def foo():
      print(from the foo)

  def timmer(func):
      start_time=time.time()
      return func
      stop_time=time.time()
      print(函数%s 运行时间是%s‘ %(func,stop_time-start_time))
  foo=timmer(foo)
  foo()
  #总结:我们确实没有改变foo的调用方式,但是我们也没有为foo增加任何新功能

   高阶函数总结
  1.函数接收的参数是一个函数名
    作用:在不修改函数源代码的前提下,为函数添加新功能,
    不足:会改变函数的调用方式
  2.函数的返回值是一个函数名
    作用:不修改函数的调用方式
    不足:不能添加新功能

5.嵌套函数

 def father(name):
      print(from father %s‘ %name)
      def son():
          print(from son)
          def grandson():
              print(from grandson)
          grandson()
      son()
  
 father(‘fangshiqi‘)

6.闭包

闭包:在一个作用域里放入定义变量,相当于打了一个包

  def father(name):
      def son():
          # name=‘alex‘
          print(我爸爸是 [%s]‘ %name)
          def grandson():
              # name=‘wupeiqi‘
             print(我爷爷是 [%s]‘ %name)
         grandson()
     son()
 
  father(‘fangshiqi‘)

 7.无参装饰器

  无参装饰器=高级函数+函数嵌套

  基本框架

  #这就是一个实现一个装饰器最基本的架子
  def timer(func):
      def wrapper():
           func()
      return wrapper

  加上参数

   def timer(func):
       def wrapper(*args,**kwargs):
           func(*args,**kwargs)
       return wrapper

  加上功能 

   import time
   def timer(func):
       def wrapper(*args,**kwargs):
           start_time=time.time()
           func(*args,**kwargs)
           stop_time=time.time()
           print(函数[%s],运行时间是[%s]‘ %(func,stop_time-start_time))
       return wrapper

  使用装饰器

   def cal(array):
       res=0
       for i in array:
           res+=i
       return res
 
   cal=timer(cal)
   cal(range(10))
   @timer  #@timer就等同于cal=timer(cal)
   def cal(array):
       res=0
       for i in array:
           res+=i
       return res
 
   cal(range(10))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Python_day4 装饰器,模块倒入,包的导入

标签:and   实现   mil   python   turn   函数名   str   lex   16px   

原文地址:http://www.cnblogs.com/fangshiqi/p/6408223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!