Python核心编程 | 装饰器
>>> def fun():
print('Fun...')
# fun 是函数
# fun() 是执行函数
#A
>>> def test():
print(1)
>>> def test():
print(2)
#B
>>> test()
2
>>>

>>> def test():
print('TEST')
>>> def fun():
print('FUN')
>>> test=fun # test改变指向,指向了和fun一样的函数体
>>> test()
FUN
>>>
>>> def fun1():
print('fun1')
>>> def fun2():
print('fun2')
>>> def test(fun):
def inner():
print('验证')
fun()
return inner
>>> mytest=test(fun1)
>>> mytest()
验证
fun1
>>>
>>> def fun1():
print('fun1')
>>> def fun2():
print('fun2')
>>> def test(fun):
def inner():
print('验证功能')
fun()
return inner
>>> def test(fun):
def inner():
print('验证功能')
fun()
return inner
>>> @test
def fun1():
print('fun1')
>>> fun1()
验证功能
fun1
>>>


>>> def fun(fn):
print('正在装饰...')
def inner():
fn()
return inner
>>> @fun
def test():
print('函数')
正在装饰...
>>>


Python核心编程 | 装饰器的更多相关文章
- Python 元编程 - 装饰器
Python 中提供了一个叫装饰器的特性,用于在不改变原始对象的情况下,增加新功能或行为. 这也属于 Python "元编程" 的一部分,在编译时一个对象去试图修改另一个对象的信息 ...
- python函数式编程-装饰器
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator). 由于函数也是一个对象,而且函数对象可以赋值给变量,所以通过变量也能调用该函数. >>> def now() ...
- Python核心编程的四大神兽:迭代器、生成器、闭包以及装饰器
生成器 生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值:在下一次调用该函数执行时,程 ...
- 面向切面编程AOP——加锁、cache、logging、trace、同步等这些较通用的操作,如果都写一个类,则每个用到这些功能的类使用多继承非常难看,AOP就是解决这个问题的,python AOP就是装饰器
面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同.面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用. 举两个大家都接触过的AOP的例子: 1)java中myba ...
- Python核心编程-闭包
百度搜了一下闭包的概念:简而言之,闭包的作用就是在外部函数执行完并返回后,闭包使得收机制不会收回函数所占用的资源,因为内部函数的执行需要依赖外函数中的变量.这是对闭包作用的非常直白的描述,不专业也不严 ...
- Python深入05 装饰器
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...
- Day04 - Python 迭代器、装饰器、软件开发规范
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
- python核心编程第二版笔记
python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d 提供调试输出1.2 –O 生成优化的字节码(生成 ...
- python核心编程--笔记
python核心编程--笔记 的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找pyt ...
随机推荐
- SpringMVC(一)helloWorld
web.xml文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...
- switch()语句
语法: switch(expression){ case value:statement break; case value:statement break; case value:statement ...
- 【repost】JavaScript运动框架之速度时间版本
一.JavaScript运动框架之速度版 1.1 运动框架的实现思路 运动,其实就是在一段时间内改变 left . right . width . height . opactiy 的值,到达目的地之 ...
- Codeforces791A Bear and Big Brother
A. Bear and Big Brother time limit per test 1 second memory limit per test 256 megabytes input stand ...
- Git 安装 windows && linux
一.安装: windows下安装Git: 1.下载Git:https://git-scm.com/download/win 2.安装Git:默认安装,一直回车 Linux下安装Git: yum安装: ...
- unigui如何把webApp的子功能映射到微信公众号菜单
只需要用UniApplication.Parameters.Values[‘xxx’]读取url的参数然后调用就可以 例如:要打开公众号菜单的取样送检指南查询模块,在自定义菜单设定:http://ww ...
- iOS_URI跳转方式多种地图导航的代码实践
先来看一下我们要达到什么效果,就是当我们点导航的时候,会弹出下面这个选择列表. 当然,如果没有安装某个地图APP,那么对应的选项是不会出现的.检测APP是否安装,只要调用下面这个方法就可以了 [[UI ...
- WPF Adorner
之前做项目时,为了实现类似微信消息数目的效果 image.png ,我之前是修改的ControlTemplate.类似于将一个带数字的控件,放在另一个控件的右上角,来实现的这个效果. 原来WPF有 ...
- .NET MVC 学习笔记(四)— 基于Bootstarp自定义弹出框
.NET MVC 学习笔记(四)—— 基于Bootstarp自定义弹出框 转载自:https://www.cnblogs.com/nele/p/5327380.html (function ($) { ...
- JQuery的页面操作
window.location = "http://www.xxxxxxxx.net" 跳转后有后退功能 其实应该是 window.location.hrefwindow.loca ...