函数闭包举例:

def father(name):
print('hello world')
def son():
print('儿子说:我的爸爸是%s' % name)
def grandfson():
print('孙子说:我的爷爷是%s' % name)
grandfson()
son()
father('小明')

运行结果:

hello world
儿子说:我的爸爸是小明
孙子说:我的爷爷是小明 Process finished with exit code 0

函数的包: 就是嵌套里的一层一层的函数

闭: 就是封装的意思

----------函数闭包的装饰器基本实现
import time

# 装饰器框架
def timmer(func):
def wrapper():
start_time = time.time()
func()
stop_time = time.time()
print('运行时间为;%s' %(stop_time-start_time))
return wrapper @timmer
def test():
time.sleep(1)
print('test函数运行完毕') # test =timmer(test) 相当于 @timmer
test()

运行结果;

test函数运行完毕
运行时间为;1.000901460647583 Process finished with exit code 0
---------函数闭包加上返回值
import time

# 装饰器框架
def timmer(func):
def wrapper():
start_time = time.time()
res = func() # 就是在运行test()
stop_time = time.time()
print('运行时间为;%s' %(stop_time-start_time))
return res
return wrapper @timmer # test = timmer(test)
def test():
time.sleep(1)
print('test函数运行完毕')
return ''
res =test() #
print(res)

运行结果:

test函数运行完毕
运行时间为;1.000777244567871
132 Process finished with exit code 0

------函数闭包加上参数


import time

# 装饰器框架
def timmer(func):
def wrapper(*args,**kwargs): # *args 元组的形式,最多可传3个值。 **kwargs 字典,相当于:wrapper(*(name,age,gender),**{ })
start_time = time.time()
res = func(*args,**kwargs)
stop_time = time.time()
print('运行时间为;%s' %(stop_time-start_time))
return res
return wrapper @timmer # test = timmer(test)
def test(name,age):
time.sleep(1)
print('test函数运行完毕,名字:%s 年龄: %s' % (name,age))
return '132'
ret = test('小王',20)
print(ret) @timmer
def test1(name,age,gender):
time.sleep(1)
print('test1名字:%s,年龄%s,性别:%s' %(name,age,gender))
return '321'
res =test1('小红',18,'男')
print(res)
 

运行结果:

test函数运行完毕,名字:小王 年龄: 20
运行时间为;1.0007729530334473
132
test1名字:小红,年龄18,性别:男
运行时间为;1.0006530284881592
321 Process finished with exit code 0

python学习-42 装饰器 --- 函数闭包1的更多相关文章

  1. python学习-43 装饰器 -- 函数闭包2

    函数闭包为函数加上认证功能 1.登陆账号 user_dic ={'username':None,'login':False} def auth_func(func): def wrapper(*arg ...

  2. python学习之装饰器-

    python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...

  3. Python学习 :装饰器

    装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...

  4. python基础(8)-装饰器函数&进阶

    从小例子进入装饰器 统计一个函数执行耗时 原始版本 import time # time模块有提供时间相关函数 def do_something(): print("do_something ...

  5. python学习笔记--装饰器

    1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来 ...

  6. Python学习笔记--装饰器的实验

    装饰器既然可以增加原来函数的功能,那能不能改变传给原函数的参数呢? 我们实验一下,先上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date ...

  7. 6月4日 python学习总结 装饰器复习

    1.  装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2.  装饰器的基本 ...

  8. Python学习笔记: 装饰器Decorator

    介绍 装饰器是对功能函数的加强. 在原来的功能函数之外,另外定义一个装饰器函数,对原来的功能函数进行封装(wrapper)并在wrapper的过程中增加一些辅助功能. 应用场景 如下场景: 业务函数f ...

  9. python学习-41 装饰器 -- 高阶函数

    装饰器:本质就是函数.是为其他函数添加附加功能的. 原则:1.不修改被修饰函数的源代码2.不修改被修饰函数的调用方式 --- 装饰器的知识储备 装饰器=高阶函数+函数嵌套+闭包 高阶函数 1.高阶函数 ...

随机推荐

  1. win10系统vs2008环境wince项目无法创建问题

    文章备份,原文来自百度某个作者的博客. 昨晚,当我升级win10之后,发现系统使用还是挺顺畅的,没有当初升级win8的时候那么多错误. 但是今晚回来之后,发现之前win8.1下已经安装好的vs2008 ...

  2. H2O框架简介

    H2O框架简介H2O是开源的,分布式的,基于内存的,可扩展的机器学习和预测分析框架,适合在企业环境中构建大规模机器学习模型. H2O核心代码使用Java编写,数据和模型通过分布式 Key/Value ...

  3. PHP中的符号 ->、=> 和 :: 分别表示什么意思?

    php新手经常碰到的问题,->.=> 和 :: 这三个家伙是什么分别都是做什么的啊!看着就很晕. 没关系,下面我们做一下详细的解释,如果你有C++,Perl基础,你会发现这些家伙和他们里面 ...

  4. 使用Docker快速搭建Tensorflow开发环境

    当我刚开始学习使用scikit-learn时,总是会出现各种各样的包依赖问题,兜兜转转了一遍才全部安装好,现在的机器学习算法开发者大都使用tensorflow.pytorch来实现自己的想法,但依然会 ...

  5. VS2015编译GDAL库出现宏重复定义 snprintf: 宏重定义

    E:\OpenSourceGraph\gdal-1.10.0\gdal\port      cpl_config.h   20行 #define HAVE_VPRINTF 1#define HAVE_ ...

  6. Carve ifc failed

    Detected IFC version: IFC2X3 Warning: Sweeper::createTriangulated3DFace, carve::triangulate::incorpo ...

  7. Flutter中的事件广播event_bus的基本使用

    官方包参考地址: https://pub.dev/packages/event_bus https://github.com/marcojakob/dart-event-bus 1.pubspec.y ...

  8. PAT 甲级 1039 Course List for Student (25 分)(字符串哈希,优先队列,没想到是哈希)*

    1039 Course List for Student (25 分)   Zhejiang University has 40000 students and provides 2500 cours ...

  9. Masonry详解

    - (void)viewDidLoad { [super viewDidLoad]; //1.view1 居中显示 UIView *view1 = [[UIView alloc]init]; view ...

  10. 记一次线上由nginx upstream keepalive与http协议"协作"引起的接口报错率飙高事件

    年前接到个任务,说要解决线上一些手机客户端接口报错率很高的问题.拿到了监控邮件,粗略一看,各种50%+的错误率,简直触目惊心.这种疑难杂症解决起来还是挺好玩的,于是撸起袖子action. 最终的结果虽 ...