1.闭包

  简单理解:闭包就是多层函数的嵌套,外层函数的返回值是内层函数的引用。

def out_func(n):
num = 100
def in_fucn(*args,**kwargs):
     # nonlocal num
if n % 2 == 0: # 里面没有修改num的值,直接使用可以,如果变成 num += n 则会报错,因此需要使用前加上nonlocal num
return n + num
       # return num += n
else:
return n- num
return in_fucn test = out_func(10)
ret = test()
print(ret) # 结果
110

  闭包的作用就是,装饰器

2.装饰器

  简单的理解:就是不改变函数结构的情况下,给函数增加功能。

def outter(func):

    def inner(*args,**kwargs):
print("今天星期五")
func(*args,**kwargs)
print("下午我和,小红去吃烤鱼")
return inner def test(*args,**kwargs):
print("今天天气很不错") test = outter(test) # 标准写法
test() # 普通的调用了test函数,但是给函数上下都多打印了一行数字。 # 结果
今天星期五
今天天气很不错
下午我和,小红去吃烤鱼

  装饰器实现检测函数运行时间的功能

import time
def outter(func): def inner(*args,**kwargs):
start_t = time.time()
func(*args,**kwargs)
end_t = time.time()
print("函数test的运行时间为{}s".format(end_t-start_t))
return inner def test(*args,**kwargs):
time.sleep(10) test = outter(test)
test() # 结果
函数test的运行时间为10.098577499389648s

优雅的写法

import time
def outter(func): def inner(*args,**kwargs):
start_t = time.time()
func(*args,**kwargs)
end_t = time.time()
print("函数test的运行时间为{}s".format(end_t-start_t))
return inner @outter
def test(*args,**kwargs):
time.sleep(10) test() # 结果
函数test的运行时间为10.000571966171265s

python进阶:装饰器的更多相关文章

  1. 进阶Python:装饰器 全面详解

    进阶Python:装饰器 前言 前段时间我发了一篇讲解Python调试工具PySnooper的文章,在那篇文章开始一部分我简单的介绍了一下装饰器,文章发出之后有几位同学说"终于了解装饰器的用 ...

  2. 【转】详解Python的装饰器

    原文链接:http://python.jobbole.com/86717/ Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现 ...

  3. 详解Python的装饰器

    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...

  4. Python各式装饰器

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

  5. Python札记 -- 装饰器补充

    本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...

  6. python基础——装饰器

    python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...

  7. 两个实用的Python的装饰器

    两个实用的Python的装饰器 超时函数 这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 .网络爬虫.数据库查询的时候特别有用 timeout装饰器的代码 ...

  8. python 基础——装饰器

    python 的装饰器,其实用到了以下几个语言特点: 1. 一切皆对象 2. 函数可以嵌套定义 3. 闭包,可以延长变量作用域 4. *args 和 **kwargs 可变参数 第1点,一切皆对象,包 ...

  9. 理解Python中的装饰器//这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档

    转自:http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html 这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档 ...

  10. python基础—装饰器

    python基础-装饰器 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身. def foo(): return 123 a=foo(); b=foo; print(a ...

随机推荐

  1. MacOS下Java Mission Control无法正常启动

    参考JMC(Java Mission Control)在mac下无法启动和显示界面 附件下载地址备份(org.eclipse.swt.cocoa.macosx.x86_64-3.112.0.jar) ...

  2. win7 注册删除postgresql服务

    注册服务 删除服务 备注:都以管理员身份运行dos

  3. 用Vue来实现音乐播放器(十八):右侧快速入口点击高亮

    问题一:当我们点击右侧快速入口的时候  被点击的地方高亮 首先我们要知道右侧快速入口是为什么高亮??因为当watch()监控到scrollY的变化了的时候  将scrollY的值和listHeight ...

  4. java RMI 远程调用

    1.背景 在学习代理模式的过程中接触到了远程调用,jdk有自己的RMI实现,所以这边自己实现了RMI远程调用,并记录下心得. 感受最深的是RMI和现在的微服务有点相似,都是通过"注册中心&q ...

  5. hive重要命令

    hadoop dfsadmin -safemode leave hadoop退出安全模式让提示符显示当前库: set hive.cli.print.current.db=true;显示查询结果时显示字 ...

  6. SSM Maven MallDemo项目为例

    一.创建maven项目 项目结构 创建一个空项目 1. mall (**pom**) 父模块,用于放置公共属性.依赖关系等. 2. mall-util (**jar**) 工具模块,用于放置常用工具类 ...

  7. Python文件读写基本操作

    https://www.jianshu.com/p/eab35af27e1c 1.打开文件操作 方法一: f = open('/mypy/test.txt') print f # 输出:<ope ...

  8. idea的类头注释和方法注释的编辑

    一:配置类头注释 1:点击file,点击settings 2:点击editor,选择 file and code template ,然后看右侧部分点击include,之后选中File Header ...

  9. Mbox-React Native

    Mbox-React Native 学习网址:https://www.jianshu.com/p/bbf9837443f3 MboX环境配置: .npm i mobx mobx-react --sav ...

  10. oracle--角色权限

    将不同权限赋予角色,再将角色赋予用户,起到管理权限的作用 SQL> create role myrole; 角色已创建. SQL> grant create session to myro ...