python基础—装饰器
python基础—装饰器
- 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身。
def foo():
return 123
a=foo();
b=foo;
print(a)
print(b)
123
<function foo at 0x000001608E2B97B8>
解释:把函数foo赋值给a和b,a 赋值的是调用后的函数,变量的值就是返回值。b 赋值的是调用前的函数,所以b 就是那个赋值的函数。函数本身+(),就是调用。
callable(a)
False
callable(b)
True
解释: 用callable判断某个东西是否可以被调用,call是调用的意思,able是“能的”形容词后缀,翻译就是可调用的。b是函数本身,可以被调用,a是函数的结果,不能被调用。
1. 函数可以作为参数传递,在函数内部仍可进行调用。可以将函数在内部定义理解为一个变量在内部定义。
def foo():
print(1234)
def bar(func):
func()
bar(foo)
1234
解释:我先定义一个函数foo,然后再定义一个函数bar,我调用foo的时候,即foo(),没有设置传递参数,打印了1234.我调用bar的时候,传递了一个函数foo作为参数,即bar(foo),得到的结果就是func(),调用函数本身,所以得到1234的结果。
2. 函数可嵌套定义,并可在内部直接调用。且可调用外层函数传递的参数.
def foo(x):
def bar():
print(x)
bar()
foo(1234)
1234
解释:内层函数可以调用外层函数传递的参数,f(1234)传递给了内层函数。内层没有找到x变量的值,就去临近的外层变量寻找。外层传递一个1234,就传递给内层了。最后一行的bar()是在外层函数的内部直接调用内层函数。
函数嵌套定义就是可以把函数看成定义一个变量,类似于b=1,还有就是内层函数可以调用外层函数传递的参数,记住这两点就可以了。
3. 函数可以作为return的返回值
def bar():
print(1234)
def foo(func):
return func
a=foo(bar)
a
<function __main__.bar>
4. 合起来就是装饰器
def deco(func):
def wrapper():
print("pre command")
ret=func()
print("post command")
return ret
return wrapper
def foo():
return(1234)
return 444
foo=deco(foo) #给变量赋值函数的是return,return的是wrapper,所以foo其实就是wrapper
foo()
pre command
post command
1234
解释:最后的foo就是wrapper,就是deco(foo),是内层函数“g()”,可以用foo.name查看,就是wrapper,callable(foo),可以看到它可以调用。
python基础—装饰器的更多相关文章
- python基础——装饰器
python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...
- python 基础——装饰器
python 的装饰器,其实用到了以下几个语言特点: 1. 一切皆对象 2. 函数可以嵌套定义 3. 闭包,可以延长变量作用域 4. *args 和 **kwargs 可变参数 第1点,一切皆对象,包 ...
- day5学python 基础+装饰器内容
基础+装饰器内容 递归特性# 1.必须有一个明确的结束条件# 2.每次进入更深一层递归时,问题规模相比上次递归应有所减少# 3.递归效率不高 def run(n): print(n) if int(n ...
- Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle
目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...
- python基础 (装饰器,内置函数)
https://docs.python.org/zh-cn/3.7/library/functions.html 1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使 ...
- python基础-装饰器,生成器和迭代器
学习内容 1.装饰器 2.生成器 3.迭代器 4.软件目录结构规范 一:装饰器(decorator) 1.装饰器定义:本质就是函数,用来装饰其他函数,即为其他函数添加附加功能. 2.装饰器原则:1)不 ...
- python基础===装饰器@property 的扩展
以下来自Python 3.6.0 Document: class property(fget=None, fset=None, fdel=None, doc=None) Return a proper ...
- <Python基础>装饰器的基本原理
1.装饰器 所谓装饰器一般是对已经使用(上线)的函数增加功能. 但是因为一般的大公司的严格按照开放封闭原则(对扩展是开放的,对修改是封闭的),不会让你修改原本的函数. 装饰器就是在不改变原本的函数且不 ...
- python基础-装饰器
一.什么是装饰器 装饰器本质就是函数,功能是为其他函数附加功能 二.装饰器遵循的原则 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 三.实现装饰器的知识储备 装饰器=高阶函数+函数嵌套 ...
随机推荐
- eclipse的maven项目中找不到Maven Dependencies
菜菜的我又来了,笨鸟不一定要先飞,但一定要坚持 今天记录一个初级错误 比如我们在eclipse创建maven项目来运行我们的web项目 搭建完工程后发现javax-servlet包全部报错 到这里我还 ...
- 【Tools】ubuntu16.04安装搜狗输入法
Ubuntu16,04 安装搜狗输入法 1.下载搜狗输入法的安装包 下载地址为:http://pinyin.sogou.com/linux/ 2.按键Ctr+Alt+T打开终端,输入以下命令切换到下载 ...
- Redis Sentinel安装与部署,实现redis的高可用
前言 对于生产环境,高可用是避免不了要面对的问题,无论什么环境.服务,只要用于生产,就需要满足高可用:此文针对的是redis的高可用. 接下来会有系列文章,该系列是对spring-session实现分 ...
- 用Markdown写微信公众号文章
目前微信公众号的编辑器是不支持Markdown语法的,那怎么办呢? 有一款叫Markdown Here的插件可以解决这个问题(支持Chrome.Firefox.Safari). 官方网站:http:/ ...
- Git环境配置+VSCode中文乱码问题
异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html 1.VSCode中文乱码问题 (files.autoguessEncoding= ...
- Yii2框架RBAC(Role-Based Access Control)的使用
1.在项目的common/config/main.php文件的components中添加如下代码: 'authManager' => [ 'class' => 'yii\rbac ...
- 隐藏文件的查看(Win/Linux/macOS)
Windows(10): 点查看->点选项,弹出文件夹选项,点查看,高级设置里找到隐藏文件和文件夹这个选项,按需求选显示或者隐藏即可. Linux: Linux下,类似于.ssh开头的文件或者文 ...
- iOS程序闪退的原因以及处理办法
iOS程序闪退是一种比较常见的现象.闪退的情况很多,造成程序闪退的原因也很多. ================================启动时闪退======================= ...
- 来了解并防范一下CSRF攻击提高网站安全
看一下我从网上找的原理图,结合举例描述,多看一遍你就知道怎么回事了. CSRF是什么呢?CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具 ...
- IOS 使用cocoapods后无法导入头文件问题
IOS 使用cocoapods后无法导入头文件问题 这时候如果你发现import的时候没有提示AFN e t wo r k i n g.h的文件,可以在target-Build Settings下修改 ...