美文网首页
闭包与装饰器

闭包与装饰器

作者: 豆豆_50dd | 来源:发表于2018-03-11 19:41 被阅读0次

闭包:

函数内的属性,都是有生命周期,都是在函数执行期间
内部函数对外部函数作用域变量的引用
闭包内的闭包函数私有化变量,完成了数据的封装,类似于面向对象

#!/usr/bin/python
# -*- coding: UTF-8 -*-
def func():#外部函数
   a = 1    #外部函数作用域的变量
   print('this is func')
   def func1(num):       #内部函数
      print('this is func1')
      print(num + a)
   return func1  #返回函数 
#func() 运行外部函数,内部函数就被创建了
var = func() #创建过程在func函数的执行过程中
#var == func1 
var(3)
var(4)
内存.jpg

外部函数func在调用后,内存没有了外部函数,但是返回了内部函数(闭包函数)func1,而var==func1。而外部函数的变量a被内部函数引用。

装饰器

装饰器不影响原有函数的功能,添加新的功能。装饰器就是一种的闭包的应用

一、普通装饰器
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def func1(func):      #外部闭包函数的参数是被装饰的函数对象
   def func2():
      print('aaabbb')
      return func()#返回了外部函数接收的被装饰函数的调用
   return func2

#return func #返回了函数对象
#return func() #返回的是一个函数调用
@func1
def myprint():
   print('你好,我是print')

myprint()
二、装饰器函数带参数
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def arg_func(sex):
   def func1(b_func):
      def func2():
         if sex == 'man':
            print('你不可以生娃')
         if sex == 'woman':
            print('你可以生娃')
         return b_func()
      return func2
   return func1

@arg_func(sex='man')
def man():
   print('好好上班。')

@arg_func(sex='woman')
def woman():
   print ('好好上班。')

man()
woman()
三、被装饰和函数带参数
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def func1(func):
   def func2(x,y):
      print(x,y)
      y += 5
      x += 5
      return func(x,y)
   return func2

@func1
def mysum(a,b):
   print(a+b)
mysum(1,5)

相关文章

  • python 高级 13闭包 装饰器

    闭包和装饰器 1.8 闭包和装饰器 学习目标 1. 能够说出闭包的定义形式 2. 能够说出装饰器的实现形式 ...

  • Python的自定义超时机制——装饰器的妙用

    装饰器 关于装饰器的入门,可以参考这篇文章:12步轻松搞定python装饰器简单来说,装饰器其实就是一个闭包(闭包...

  • Python装饰器-专题笔记

    学会装饰器,Python更进阶 函数作用域到闭包到装饰器讲解,及闭包和装饰器的运用。 [√] 慕课网Meshare...

  • Python-闭包和修饰器

    作用域 闭包 code: 装饰器 code: 装饰器案例 code:

  • 2020-012 python闭包与装饰器

    python闭包与装饰器 闭包 函数和对其周围状态(lexical environment,词法环境)的引用捆绑在...

  • 闭包与装饰器

    闭包: 函数内的属性,都是有生命周期,都是在函数执行期间内部函数对外部函数作用域里变量的引用闭包内的闭包函数私有化...

  • 闭包与装饰器

    闭包:引用了自由变量的函数。这个被引用的自由变量将和这个闭包函数一同存在,即使离开了创造它的环境也不例外。 闭包用...

  • Python 2 - 高级用法 - 装饰器

    Python 2 - 高级用法 - 装饰器 一谈到 装饰器,就离不开闭包 闭包 闭包就是能够读取其他函数内部变量的...

  • Python 简明教程 --- 22,Python 闭包与装饰器

    当你选择了一种语言,意味着你还选择了一组技术、一个社区。 目录 本节我们来介绍闭包与装饰器。 闭包与装饰器是函数的...

  • 装饰器

    1.装饰器的概念 装饰器是一个闭包:内层函数引用外层函数的变量(参数也算变量),然后返回内层函数,就是闭包。装饰器...

网友评论

      本文标题:闭包与装饰器

      本文链接:https://www.haomeiwen.com/subject/oskwfftx.html