python——函数之装饰器
2018-08-13 07:48:19来源:博客园 阅读 ()
1 问题
实际生活中,我们很难一次性就把一个函数代码写得完美无缺。当我们需要对以前的函数添加新功能时,我们应该怎么做?
2 问题解决思路
(1)可以直接修改原来的函数,在函数内直接修改。当我们对多个函数都新增这个功能时,这样修改显得代码冗余。
(2)采用装饰器来解决。装饰器是python里面的一种特殊函数(装饰其它函数),它可以在函数名以及函数体不改变的前提下,给一个函数附加一些额外代码。
3 简单装饰器案例(python3.x)
3.1 原代码功能:根据你输入的内容,输出你输入的城市名称。原代码如下。
1 def bj(): 2 print("北京!") 3 4 def sz(): 5 print("深圳!") 6 7 def sh(): 8 print("上海!") 9 10 # 功能逻辑 11 chioce = input("请输入你喜欢的城市名称:") 12 13 if chioce == "北京": 14 bj() 15 elif chioce == "深圳": 16 sz() 17 else: 18 sh()
上面代码执行后结果为:
3.2 现在要添加新功能:在原来的输出城市名称前先输出"你好:"。
3.3 解决方案1:直接在原来的函数里面添加输出“你好”相应代码。修改后的代码如下:
1 def bj(): 2 print("你好:北京!") 3 4 def sz(): 5 print("你好:深圳!") 6 7 def sh(): 8 print("你好:上海!") 9 10 # 功能逻辑 11 chioce = input("请输入你喜欢的城市名称:") 12 13 if chioce == "北京": 14 bj() 15 elif chioce == "深圳": 16 sz() 17 else: 18 sh()
上面代码执行后结果为:
3.3 解决方案2:把新增功能写到一个新的函数里面,这个新的函数就是装饰器。修改后代码如下:
1 # 装饰器函数 2 def hello(func): 3 def innner(): 4 print("你好:", end='') 5 func() 6 return innner 7 8 @hello 9 def bj(): 10 print("北京!") 11 12 @hello 13 def sz(): 14 print("深圳!") 15 16 @hello 17 def sh(): 18 print("上海!") 19 20 # 功能逻辑 21 chioce = input("请输入你喜欢的城市名称:") 22 23 if chioce == "北京": 24 bj() 25 elif chioce == "深圳": 26 sz() 27 else: 28 sh()
上面代码执行后结果为:
4 复杂装饰器案例(python3.x)
4.1 代码功能:根据选择进入不同区域,如图片区域或音乐区域。原代码如下,
1 def ftp(): 2 print("这里是图片区") 3 4 def fyy(): 5 print("这里是音乐区") 6 7 8 # 功能代码 9 ychoice = input("请输如的你的选择:") 10 11 if ychoice == "1": 12 ftp() 13 elif ychoice == "2": 14 fyy() 15 else: 16 print("输入错误:请输入1或2!")
上面代码执行后结果为:
4.2 需要新增的功能:根据不同情况,在输出时首先输出"---------------------------"或者"****************************"的分隔符。
4.3 使用装饰器来增加这个新功能,修改后的代码如下,
1 def login(char): 2 def checkin(func): 3 def inner(): 4 print(char * 50) 5 func() 6 return inner 7 return checkin 8 9 @login("*") 10 def ftp(): 11 print("这里是图片区") 12 13 @login("-") 14 def fyy(): 15 print("这里是音乐区") 16 17 # 逻辑功能 18 ychoice = input('''请输如的你的选择:''') 19 20 if ychoice == "1": 21 ftp() 22 elif ychoice == "2": 23 fyy() 24 else: 25 print("输入错误:请输入'1'或者'2'!")
上面代码执行后结果为:
2018-08-12
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash