初学者又遇到难题了吧?听都没听说过,装饰器……英文:decorator,啥意思?室内装饰师,油漆匠,适于室内装饰的……

听不懂,更不知道啥意思,怎么用了吧?这不可怕,可怕的是那些大神,把这个东西写的巨复杂,你要看懂这个概念,还先要去学10个其它的概念,回来再看还不一定能看懂。

日常生活中有这种情况,商场刚装修完,都是大玻璃门,怕有人撞上,就要在上面用油漆写“小心琉璃”……但是玻璃太多,都写上字太费劲,干脆就用油漆画个叉就达到目的了。用油漆简单装饰一下,完成省得有人撞上和指路的功能。

“装饰器”就是做个装修标记,并且有它的功能,比如“小心玻璃”和“指路”,看到这个标记你就知道它要表达什么意思了,按着它的指示来肯定没错。

在Python里装饰器的定义:在程序运行时,增加动态功能的方式,称之为“装饰器”,装饰器本质上也是一个Python函数。

那么问题来了,有可能初学者对这个定义里的函数不理解,不得不多讲一点。

函数,“数”好理解,“函”本意就是一种平级之间的信,比如两个单位传达或者反馈信息。

假设有这样一种情况,你要出去旅游购物,又怕被黑,在出发前,找到好朋友诸葛不亮出主意,他给了你一个密函,告诉你到地方再打开。等你到地方打开一看,上写5个大字“报价砍一半”。接下来买什么东西,都按这个原则来,这个就是最基本的函数了。

写成公式:购买价格=对方报价乘0.5,这个公式就是函数公式。用标准定义来说“设在某变化过程中有两个变量x、y,如果对于x在某一范围内的每一个确定的值,y都有唯一确定的值与它对应,那么就称y是x的函数,x叫做自变量。”来段简单的代码感受一下这个“讲价函数”。

为了方便初学者,本文所有函数名称都使用全拼。def Jianjia(x):

y =0.5

x = x * y

return x

print(Hanshu(100))

print(Hanshu(50))

输出结果,你猜是不是50和25?我猜你猜对了。

def是固定格式,Hanshu就是函数的名称,(x)就是参数。

接下来,就要旅游购物了,好在有个机器人替我购物,它只能听懂Python语言,我要告诉它购买什么和详细的购买程序。

我要买三样东西:猪、大象、长颈鹿,流程是询价,对应东西,再购买。

有三个购买函数(Goumai_1,Goumai_2,Goumai_3),写出来的流程是这样:def Goumai_1():

print('询价')

print('猪')

print('购买成功')

def Goumai_2():

print('询价')

print('大象')

print('购买成功')

def Goumai_3():

print('询价')

print('长颈鹿')

print('购买成功')

Goumai_1()

Goumai_2()

Goumai_3()

执行结果是这样:询价

购买成功

询价

大象

购买成功

询价

长颈鹿

购买成功

现在我发现,这样写太复杂了。因为“询价”和“购买成功”动作是一样的,而且我要想在“购买成功”上加一个感叹号,需要加三次才能成功,如果买1000个东西,就要加1000次感叹号了,想想就要累死了。

于是我优化了一下程序,把购买东西Goumai(Dongxi)定义成了一个函数,执行的结果和上一个程序还是一样的,而且“购买成功”还加了一个感叹号,只操作了一次,可以显示三次啊。def Goumai(Dongxi):

print('询价')

Dongxi()

print('购买成功!')

def Zhu():

print('猪')

def Daxiang():

print('大象')

def Changjinglu():

print('长颈鹿')

Goumai(Zhu)

Goumai(Daxiang)

Goumai(Changjinglu)

但是问题又来了,每次我还要告诉机器人“购买(猪)”,“购买(大象)”,“购买(长颈鹿)”,能不能干脆点“购买”两个字都不说?直接在“猪、大象、长颈鹿”上做个标记,机器人看到标记就执行购买动作呢?答案当然是可以了。

这时“购买”就变成了一个固定的动作,而不是三个步骤,为了让机器人理解,我在“购买”函数里直接定义了这个动作函数。def Goumai(Dongxi):

def Dongzuo():

print('询价')

Dongxi()

print('购买成功!')

return Dongzuo

这个时候装饰器才正式出场,装饰器就是用@来表示,加上动作函数名称。

比如下文中的,漂亮吗?

@Goumai

可以理解成用@符号把购买这个两个字像用口香糖粘在了物品名称上一样。

机器人看到@的标签,就会按@里的动作来执行。

代码如下:def Goumai(Dongxi):

def Dongzuo():

print('询价')

Dongxi()

print('购买成功!')

return Dongzuo

@Goumai

def Zhu():

print('猪')

@Goumai

def Daxiang():

print('大象')

@Goumai

def Changjinglu():

print('长颈鹿')

Zhu()

Daxiang()

Changjinglu()

再结合一下刚才的讲价函数,先询价,再讲价,再购买,就可以写成这样:def Goumai(Dongxi):

def Dongzuo():

print('询价')

Dongxi()

print('购买成功!')

return Dongxi

return Dongzuo

def JangJia(x):

y =0.5

x = int(x) * y

return x

@Goumai

def Zhu():

Baojia = input('请输入对方报价:')

Huanjia = JangJia(Baojia)

print('猪:' + str(Huanjia))

@Goumai

def Daxiang():

Baojia = input('请输入对方报价:')

Huanjia = JangJia(Baojia)

print('大象:' + str(Huanjia))

@Goumai

def Changjinglu():

Baojia = input('请输入对方报价:')

Huanjia = JangJia(Baojia)

print('长颈鹿:' + str(Huanjia))

Zhu()

Daxiang()

Changjinglu()

执行后的结果:询价

请输入对方报价:100

猪:50.0

购买成功!

询价

请输入对方报价:50

大象:25.0

购买成功!

询价

请输入对方报价:25

长颈鹿:12.5

购买成功!

最后一个例程的代码其实还可以写的更简单,因为可以用多个装饰器,希望有高人帮忙再指导一下。

总之,先从感性上理解“装饰器”,后续才能进阶学习啊!

python与室内设计_Python初学者笔记(五):白话讲“装饰器”,你看不懂算我笨!...相关推荐

  1. Python初学者笔记(六):白话讲“装饰器”,你看不懂算我笨!

    初学者又遇到难题了吧?听都没听说过,装饰器--英文:decorator,啥意思?室内装饰师,油漆匠,适于室内装饰的-- 听不懂,更不知道啥意思,怎么用了吧?这不可怕,可怕的是那些大神,把这个东西写的巨 ...

  2. python 课后作业_python 学习笔记 五 课后作业

    # # 1.有如下变量(tu是个元组),请实现要求的功能 # tu = ('alex',[11,22,{'k1':'v1','k2':['age','name'],'k3':(11,22,33)},4 ...

  3. python装饰器带参数函数二阶导数公式_一文搞定Python装饰器,看完面试不再慌

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第12篇文章,我们来看看Python装饰器. 一段囧事 差不多五年前面试的时候,我就领教过它的重要性.那时候我Pyt ...

  4. Python基础(八)--迭代,生成器,装饰器与元类

    目录 Python基础(八)--迭代,生成器,装饰器与元类 1 迭代 1.1 可迭代对象与迭代器 1.2 自定义迭代类型 1.3 迭代合体 2 生成器 2.1 什么是生成器 2.2 生成器表达式 2. ...

  5. python的装饰器迭代器与生成器_详解python中的生成器、迭代器、闭包、装饰器

    迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1|1可迭代对象 以直接作用于 for ...

  6. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  7. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  8. python查看方法作用_python学习笔记1,新手小白也能看得懂

    这是酸菜在风变编程上学习python时积累的学习笔记,希望能帮到同样也在学习中的小伙伴.持续更新~ 第0关 Print()函数 (1)不带引号:让计算机读懂括号里的内容,打印最终的结果 例:print ...

  9. python elseif用法_python学习笔记(一)

    0.前言 本文是根据廖雪峰python教程学习总结而来. 参考<python学习手册>,<流畅的python>以及python官方手册等网络资料 略过了与C和C++ 语言相同的 ...

最新文章

  1. Syncthing源码解析 - 第三方库
  2. android 继承dialog自定义对话框
  3. 成功解决TypeError: __init__() got an unexpected keyword argument 'serialized_options'
  4. 图像缩放算法_技术专栏|基于无人机LK光流算法的适用性及其优化方法探究
  5. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
  6. how drop down list description is displayed by UI framework
  7. Codeforces Round #701 (Div. 2) E. Move and Swap 思维 + dp
  8. c语言字符串未初始化strcat,C语言中字符串常用函数strcat与strcpy的用法介绍
  9. 接口测试基础一--HTTP请求
  10. 总结Django一些开发经验
  11. ‘adb‘ 不是内部或外部命令and Error while executing: am start -n解决
  12. 读书学习:我编程我快乐(一.2)
  13. oracle中入库判断空串,不同数据库和SpringDataJPA对字段值null,''空值的判断
  14. 各类4G手机进入工参模式查看手机信息
  15. 圆柱属于能滚动的物体吗_滚动轴承中摩擦的主要来源,轧机轴承技术(一)
  16. 自定义cobbler安装系统菜单界面
  17. android手势密码csdn,Android简易手势密码开源库
  18. openstack源码架构_openstack创建虚拟机源码阅读
  19. 华南农业大学计算机专业怎么样,华南农业大学(专业学位)计算机技术考研难吗...
  20. 移动端meta设置大全(持续收集中。。。。)

热门文章

  1. 计算机课程如何试讲,信息技术教师试讲说课稿
  2. NYOJ-7街区最短问题
  3. 网络和多媒体知识(3)
  4. 90 后码农搬砖心态,有的斗志昂扬,有的行尸走肉
  5. 小程序:微信开发者工具中页面一片空白怎么办?
  6. ZBar源码分析——多线程部分代码分析 | 2021SC@SDUSC
  7. 杜克大学教授李昕:面对中外科技差距,以新赛道颠覆旧市场
  8. Kotlin 中的初始化lazy和变量lateinit
  9. File.Create(zipFilePath)时对路径XX的访问被拒绝
  10. 十六进制的ascii码 \u5929\u6cf0\u56fd\u9645 解码成unicode