CSIC_716_20191112【闭包函数和装饰器】
闭包函数
什么是闭包函数:闭包函数是函数嵌套、函数对象、名称空间和作用域的集合体。
闭包函数必须在函数内部定义,闭包函数可以引用外层函数的名字。
# _*_ coding: gbk _*_
# @Author: Wonder
def outer():
def inner():
#代码体
return inner() outer() # 调用闭包函数
装饰器
什么是装饰器:装饰器本身是一个函数,是在不修改其他函数源代码以及调用方式的前提下,给其他函数增加功能的函数。
装饰器遵循开放闭合原则。即对函数功能的添加是开放的,对函数功能的修改是关闭的。
为什么要使用装饰器:解决代码冗余问题,提高代码的可拓展性。
如何使用装饰器:1、编写装饰器,2、调用装饰器。
1、编写装饰器
装饰器的基本结构
def wrappper(func):
def inner(*args, **kwargs):
#函数执行前应增加的功能
res = func(*args,**kwargs)
#函数执行后应增加的功能
return res
return inner
2、调用装饰器
def wrappper(func):
def inner(*args, **kwargs):
#函数执行前应增加的功能
res = func(*args,**kwargs)
#函数执行后应增加的功能
return res
return inner def func1(*args, **kwargs):
# 函数体代码
return
func1 = wrappper(func1)
func1(0, 1, a=0, b=1) # 增加装饰器的原函数调用方式没变,源代码也没变
python中还提供了解释器的语法糖结构,注意装饰器一定要写在被装饰对象前面。用@符号+装饰器函数名表示
def wrappper(func):
def inner(*args, **kwargs):
# 函数执行前应增加的功能
res = func(*args, **kwargs)
# 函数执行后应增加的功能
return res return inner @wrappper
def func1(*args, **kwargs):
# 函数体代码
print('闭包')
return func1(0, 1, a=0, b=1) # 增加装饰器的原函数调用方式没变,源代码也没变
扩展:两个装饰器的执行过程,注意理解https://blog.csdn.net/xiangxianghehe/article/details/77170585
# _*_ coding: gbk _*_
# @Author: Wonder
def deco1(func):
print(1) def wrapper1():
print(2)
func()
print(3) print(4)
return wrapper1 def deco2(func):
print(5) def wrapper2():
print(6)
func()
print(7) print(8)
return wrapper2 @deco1
@deco2
def foo():
print('foo') foo() 答案5、8、1、4、2、6、foo、7、3
含参装饰器
CSIC_716_20191112【闭包函数和装饰器】的更多相关文章
- day11 闭包函数和装饰器
1.函数不是新知识点 主要是学习函数的用法 在面向对象编程中,一切皆对象,函数也不例外 具体的表现 1.函数可以引用 2.函数可以作为函数的参数 3.函数可以作为函数的返回值 4.可以被存储到容器类型 ...
- python基础-闭包函数和装饰器
闭包函数和装饰器 闭包函数 概念:在函数中(嵌套)定义另一个函数时,内部函数引用了外层函数的名字. 特性 闭包函数必须在函数内部定义 闭包函数可引用外层函数的名字 闭包函数是函数嵌套.函数对象.名称空 ...
- Python之函数对象、函数嵌套、名称空间与作用域、闭包函数、装饰器
目录 一 函数对象 二 函数的嵌套 三 名称空间和作用域 四 闭合函数 五 装饰器 一.函数对象 1.函数是第一类对象 #第一类对象的特性:# 可以被引用 # 可以当做参数传递 # 返回值是函数 # ...
- 【Python3的命名空间与作用域,闭包函数,装饰器】
一.命名空间与作用域 命名空间是名字和对象的映射,就像是字典,key是变量名,value是变量的值 1.命名空间的定义 name='egon' #定义变量 def func(): #定义函数 pass ...
- day11_7.11 闭包函数与装饰器
补充: callable 代表可调用的,加括号可以执行.(函数或者类) import this 查看python之禅 一.闭包函数 所谓闭包函数,就是定义在函数内部的函数,也就是函数定义的嵌套.而在 ...
- Python--day13(函数嵌套定义,global、nonlocal、闭包函数、装饰器)
今日主要内容 1. 函数的嵌套定义 2. global.nonlocal关键字 3. 闭包及闭包的应用场景 4. 装饰器 1. 函数的嵌套定义 概念:在一个函数的内部定义另一个函数 为什么要有 ...
- python---基础知识回顾(二)(闭包函数和装饰器)
一.闭包函数: 闭包函数: 1.在一个外函数中定义了一个内函数 2.内函数里运用了外函数的临时变量,而不是全局变量 3.并且外函数的返回值是内函数的引用.(函数名,内存块地址,函数名指针..) 正确形 ...
- Python之闭包函数、装饰器
1.闭包函数 #作用域关系在函数定义阶段时就已经固定死了,与调用位置无关 # 即:在任意位置调用函数都需要跑到定义函数时寻找作用域关系 # def f1(): # x=1 # def inner(): ...
- python基础之闭包函数与装饰器
闭包函数: 什么是闭包函数: 闭指的是定义在一个函数内部 包指的是该函数包含对外部作用域(非全局作用域)名字的引用 def counter(): n=0 def incr(): nonlocal n ...
随机推荐
- Day 19:面向对象【类方法】静态属性/静态属性/类方法
静态属性 @property class Mom: gender = "woman" def __init__(self,name,weight): self.name = n ...
- Pandas之read_excel()和to_excel()函数解析
read_excel() 加载函数为read_excel(),其具体参数如下. read_excel(io, sheetname=0, header=0, skiprows=None, skip_fo ...
- js面向对象(一)---基本的概念、属性、方法
一.什么是面向对象编程 1.用对象的思想去写代码,就是面向对象编程 2.我们一直在使用对象,如数组Array 时间Date //我们把系统自带的对象,叫做系统对象 var arr = new A ...
- xinetd - 扩展的互联网服务守护进程
总览 SYNOPSIS xinetd [options] 描述 DESCRIPTION xinetd 执行与 inetd 相同的任务:它启动提供互联网服务的程序.与在系统初始化时启动这些服务器,让它们 ...
- Vue报错type check failed for prop
在报错的'value'属性前面加:或者去掉:即可解决问题.
- 1 新增硬盘挂载home文件夹。 2 修理扇区
一 挂载新硬盘 主机磁盘容量不够大时,想新增一颗新磁盘的时候.并将磁盘全部分割成单一分割槽,且将该分割槽挂载到/home目录,你该怎么做呢? 1 安装硬盘. 2 磁盘分区. 3 格式化磁盘 4 将 ...
- Delphi 取整函数round、trunc、ceil和floor
Delphi 取整函数round.trunc.ceil和floor 1.Round(四舍六入五留双)功能说明:对一个实数进行四舍五入.(按照银行家算法)例:var i, j: Integer;begi ...
- css制作旋转风车(transform 篇)
做这个案例之前首先要大概了解CSS的transform的属性 transform 属性向元素应用 2D 或 3D 转换.该属性允许我们对元素进行旋转.缩放.移动或倾斜. 看看效果图 打开的时候自动旋转 ...
- Java中的线程Thread方法之---suspend()和resume()
前篇说到了Thread中的join方法,这一篇我们就来介绍一下suspend()和resume()方法,从字面意义上可以了解到这两个方法是一对的,suspend()方法就是将一个线程挂起(暂停),re ...
- HDU6440 Dream 2018CCPC网络赛-费马小定理
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门 原题目描述在最下面. 给定一个素数p ...