python进阶:装饰器
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进阶:装饰器的更多相关文章
- 进阶Python:装饰器 全面详解
进阶Python:装饰器 前言 前段时间我发了一篇讲解Python调试工具PySnooper的文章,在那篇文章开始一部分我简单的介绍了一下装饰器,文章发出之后有几位同学说"终于了解装饰器的用 ...
- 【转】详解Python的装饰器
原文链接:http://python.jobbole.com/86717/ Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现 ...
- 详解Python的装饰器
Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...
- Python各式装饰器
Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...
- Python札记 -- 装饰器补充
本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...
- python基础——装饰器
python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...
- 两个实用的Python的装饰器
两个实用的Python的装饰器 超时函数 这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 .网络爬虫.数据库查询的时候特别有用 timeout装饰器的代码 ...
- python 基础——装饰器
python 的装饰器,其实用到了以下几个语言特点: 1. 一切皆对象 2. 函数可以嵌套定义 3. 闭包,可以延长变量作用域 4. *args 和 **kwargs 可变参数 第1点,一切皆对象,包 ...
- 理解Python中的装饰器//这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档
转自:http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html 这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档 ...
- python基础—装饰器
python基础-装饰器 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身. def foo(): return 123 a=foo(); b=foo; print(a ...
随机推荐
- vue中动态加载图片路径的方法
assets:在项目编译的过程中会被webpack处理解析为模块依赖,只支持相对路径的形式,如< img src=”./logo.png”>和background:url(./logo.p ...
- 2019年CCPC网络赛 HDU 6703 array【权值线段树】
题目大意:给出一个n个元素的数组A,A中所有元素都是不重复的[1,n].有两种操作:1.将pos位置的元素+1e72.查询不属于[1,r]中的最小的>=k的值.强制在线. 题解因为数组中的值唯一 ...
- fedora18 You might need to install dependency packages for libxcb.
22 down vote The page Qt for X11 Requirements lists some packages required to build Qt on Debian. Th ...
- What does the dot after dollar sign mean in jQuery when declaring variables?
https://stackoverflow.com/questions/22156664/what-does-the-dot-after-dollar-sign-mean-in-jquery-when ...
- 局域网IP耗尽
w 大量的vm 大量的实例 动态修改 mac
- 013-elasticsearch5.4.3【五】-搜索API【二】term术语查询-termQuery、rangeQuery、existsQuery、prefixQuery、wildcardQuery、regexpQuery、fuzzyQuery
一.概述 虽然全文查询将在执行之前分析查询字符串,但Term级查询将根据存储在倒排索引中的确切术语进行操作. 这些查询通常用于结构化数据,如keyword.数字,日期和枚举,而不是全文字段.或者,它们 ...
- PANIC: Missing emulator engine program for ‘x86’ CPU.
参考链接:https://zhidao.baidu.com/question/652153765084187325.html 解决方案:看图最上面路径,进入你的文件夹下,把红文件夹 ( 1 ) 中的所 ...
- python 正则表达式 re.split
内置函数split与re库中的split,有很多相似处 #!use/bin/python #coding:utf-8 import re str= "https://i.cnb1logs.c ...
- Hadoop and Big Data
Hadoop(1): HDFS Basics Hadoop(2):HDFS Block Management Hadoop(3): Prepare inputs for MapReduce mappe ...
- Linux的简介安装与简单使用
一: 适合初学者的最佳Linux发行版:Linux Mint 老旧硬件的最佳Linux发行版:Ubuntu MATE 安全行业的最佳Linux发行版:Kali Linux 专属游戏的Linux发行版: ...