python全栈开发总结_python全栈开发 * 12 知识点汇总 * 180530
⼀. 通⽤装饰器的回顾
1.开闭原则: 对增加功能开放. 对修改代码封闭
2.装饰器的作⽤: 在不改变原有代码的基础上给⼀个函数增加功能
3.通⽤装饰器的写法:
def wrapper(fn):
def inner(*args,**kwargs):
print("目标函数前一行")
ret=fn(*args,**kwargs)
print("目标函数后一行")
return ret
return inner
@wrapper
def target_func(*args,**kwargs):
print("我是目标函数体")
target_func()
4.执⾏过程:
(1) 程序从上向下, 当执⾏到@wrapper的时候. 把函数作为参数传递给wrapper函数. 得到inner函数. 重新赋值给target_func
(2) 当执⾏到target_func的时候. 我们实际上执⾏的是inner函数. inner函数会先执⾏⽬标函数之前的代码. 然后再执⾏你的⽬标函数. 执⾏完⽬标函数最后执⾏的是⽬标函数
之后的代码
⼆. 函数的有⽤信息
1. 如何给函数添加注释 用三个引号来表示
def eat(food,drink):
""" eat:把传递进来的吃掉
:param food: 参数food是什么意思
:param drink: 参数drink是什么意思
:return: None 返回什么
"""
print(food,drink)
return "very good"
按住ctrl 点内置函数名,可以查看函数的注释如int,str 等
2.如何获取到函数的相关信息
def eat(food,drink):
"""
:param food: 参数food是什么意思
:param drink: 参数drink是什么意思
:return: None 返回什么
"""
print(food,drink)
# print(eat.__name__) 读取不出来
# print(eat.__doc__) 读取不出来
return "very good"
eat("水果","可乐")
print(eat.__name__) # 查询函数名
print(eat.__doc__) #查询函数文档注释
函数名.__name__可以查看函数的名字 (双下划线)
函数名.__doc__ 可以查看函数的⽂档注释
(1) 一个被装饰器装饰过的函数:查询目标函数的函数名
def wrapper(fn):
def inner(*args,**kwargs): # 聚合
print("目标函数前一行")
ret=fn(*args,**kwargs) # 打散 这⾥的作⽤. 其实就是为了保证我可以装饰所有函数⽽准备的
print("目标函数后一行")
return ret
return inner
@wrapper
def target_func(*args,**kwargs):
print("我是目标函数体")
target_func()
print(target_func.__name__) # 被装饰过的函数函数名是inner.
(2) 把上述查询函数名修改为原函数名
from functools import wraps # 加 引入函数模块
def wrapper(fn):
@wraps(fn) # 加 使用函数原来的名字
def inner(*args,**kwargs):
print("目标函数前一行")
ret=fn(*args,**kwargs)
print("目标函数后一行")
return ret
return inner
@wrapper
def target_func(*args,**kwargs):
print("我是目标函数体")
target_func()
print(target_func.__name__) # 查询结果不再是inner 而是target_func
@wrapper
def new_target_func():
print("我是另⼀个⽬标函数")
new_target_func()
print(new_target_func.__name__)
三.装饰器传参
def wrapper_out(flag):
def wrapper(fn):
def inner(*args,**kwargs):
if flag==True: # 设定条件,满足执行下一步
print("目标函数前一行")
ret=fn(*args,**kwargs)
print("目标函数后一行")
else: # 不满足执行这一步
ret=fn(*args,**kwargs)
return ret
return inner
return wrapper
@wrapper_out(True)
def target_func():
print("我是目标函数体")
target_func() # 目标函数前一行,我是目标函数体,目标函数后一行
@wrapper_out(False)
def target_func():
print("我是目标函数体")
target_func() # 我是目标函数体
执行步骤: 先执⾏wrapper(True) 然后再@返回值. 返回值恰好是wrapper. 结果就是@wrapper
四.多个装饰器装饰一个函数
def wrapper(fn):
def inner(*args,**kwargs):
print("我是a")
ret=fn(*args,**kwargs)
print("我是b")
return ret
return inner
def wrapper1(fn):
def inner(*args,**kwargs):
print("我是c")
ret=fn(*args,**kwargs)
print("我是d")
return ret
return inner
def wrapper2(fn):
def inner(*args,**kwargs):
print("我是e")
ret=fn(*args,**kwargs)
print("我是f")
return ret
return inner
@wrapper2
@wrapper1
@wrapper
def eat(*args,**kwargs):
print("我是目标函数")
eat()
执行步骤:
执⾏顺序:
⾸先@wrapper1装饰起来. 然后获取到⼀个新函数是wrapper1中的inner.
然后执⾏@wrapper2.这个时候. wrapper2装饰的就是wrapper1中的inner.
第⼆层装饰器前(第⼀层装饰器前(⽬标)第⼀层装饰器后)第⼆层装饰器后. 程序从左到右执⾏
五.补充知识点
python全栈开发总结_python全栈开发 * 12 知识点汇总 * 180530相关推荐
- 初级python爬虫工程师面试题_Python爬虫工程师常见面试题汇总
爬虫是Python的重要应用方向之一,也是学习Python的学员求职的主要方向.为了帮助学员更快更好的通过企业面试,小编悉心整理了5道Python爬虫面试题及答案,希望能够给大家提供帮助! 1.简要介 ...
- python全栈开发优势_Python全栈开发多少钱?学Python价格贵吗?
Python全栈开发培训多少钱?学习Python是大家进入编程世界的理想之选,而且Python也是一门非常受欢迎的编程,可以从事的领域有很多. 从目前市场上的行情来说,一般情况下Python培训的费用 ...
- python全栈开发下载_python全栈开发神器 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...
将安卓手机打造成你的python全栈开发利器 超神利器- 相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我对它失望之极.Q ...
- python全栈开发网络_Python全栈开发:django网络框架(二)
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
- python实现四位一并法_python 全栈开发,Day4(列表切片,增删改查,常用操作方法,元组,range,join)...
一.列表 列表是python中的基础数据类型之一,它是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = ['alex',123,Ture,(1,2,3,'wusir') ...
- python全栈开发内容_Python全栈开发之Day02
一. 回顾上节主要内容 1. python是一门解释型弱类型高级语言 2. python的解释器 CPython, PyPy, JPython, IronPython, Ipython 3. prin ...
- python编程玩具有哪些_python 全栈开发,Day133(玩具与玩具之间的对话,基于jieba gensim pypinyin实现的自然语言处理,打包apk)...
先下载github代码,下面的操作,都是基于这个版本来的! 注意:由于涉及到版权问题,此附件没有图片和音乐.请参考链接,手动采集一下! 请参考链接: 一.玩具与玩具之间的对话 app消息提醒 之前实现 ...
- python全栈开发中级_python全栈开发中级班全程笔记(第二模块)第一部分:文件处理...
第二模块 第一部分:文件处理与函数 #插曲之人丑就要多读书:读书能够提高个人素质与内涵,提升个人修养与能力,以及层次的提升. 推荐书籍:追风筝的人.白鹿原 电影:阿甘正传.辛德勒的名单 第一节:三元运 ...
- python全栈开发网络_Python 全栈开发:网络编程
一 socket 1.什么是socket 看一看图中socket的位置 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把 ...
最新文章
- Windows 之 win10快捷键
- 《剑指offer》从上往下打印二叉树
- vamei java_java Vamei快速教程20 GUI
- Java代码总结【1】_查询手机号码归属地
- java 编辑二进制文件_java写二进制文件,不能直接编辑,该怎么操作?
- 有关javabean的说法不正确的是_7、关于JavaBean,下列叙述中不正确的是
- Three Tips
- 如何将数据库文件进行压缩
- 使用oledb读写excel出现“操作必须使用一个可更新的查询”的解决办法
- matlab数据行次序反转,如何在Excel表格中将数据顺序翻转-excel怎么把一行数据颠倒...
- iOS 设置tableview组头组尾的背景色
- matlab 比较两个函数,Matlab同时拟合两个函数 - 数学 - 小木虫 - 学术 科研 互动社区...
- 3D立方体图片切换动画
- 《自来水哲学-松下幸之助自传》读后感
- 机器学习——贝叶斯算法(一)
- ORACLE sqlplus命令
- Golang基于学习总结
- terraform import-导入已有资源到Terraform
- [机器学习]粒子群算法
- 国内外PLM/PDM厂商情况