这不是我第一次学Python入门课,去年、前年我都学过Python入门。所以文章的标题一点都没有标题党的意思。但是整个入门篇还有一个最难的东西没有讲,这个知识点好多书里面对这块要么不讲,要么就是讲的太深奥,这个知识点卡在那里很难受。

这块到底是什么的,猜对了就是传说中的装饰器,我记得我好几年前刚学Python的时候,看装饰器就觉得看九阴真经里面的怪文字,完全看不懂,确实装饰器是一个非常难以理解的概念。

1.什么是装饰器

网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象

每个人都有的内裤主要是用来遮羞,但是到了冬天它没法为我们防风御寒,肿木办?

我们想到的一个办法就是把内裤改造一下,让它变得更厚更长,这样一来,它不仅有遮羞功能,还能提供保暖,不过有个问题,这个内裤被我们改造成了长裤后,虽然还有遮羞功能,但本质上它不再是一条真正的内裤了。于是聪明的人们发明长裤

在不影响内裤的前提下,直接把长裤套在了内裤外面,这样内裤还是内裤,有了长裤后再也不冷了

装饰器就像我们这里说的长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效。

2.装饰器的前传4步曲

为什么讲装饰器要放在入门篇的末尾讲呢,因为这货太难了,里面有许多前提要懂。Python的函数相信大家都懂了,但是大家知不知道函数也是一种对象,可以像参数一样传递,我们看下面的例子吧:

1)函数也是对象

defmessage(word=’hello’):

returnword.upper()+’!’

printmessage()

>>

HELLO!

my_message=message

printmy_message

>>

printmy_message()

>>

HELLO!

也就是说message可以赋值给另外一个变量

2)函数可以嵌套,定义在另外一个函数内部

defshow():

print‘Runinshow()’

defmessage(word=’hello’):

returnword

printmessage()

show()

>>

Runinshow()

hellomessage可以嵌套在show函数里面,调用show的时候也会跑下message函数

3)函数作为参数返回

一个函数还可以当做另外一个函数的返回值,不信看下面这个例子:

>>

hello…4)函数作为参数传入

我们先创建一个getName函数,然后把这个函数当做参数传递给foo函数

>>

IwillcallthegetNamefunctionlater

leo

3.装饰器的真面目

1).经过前面几步,大家应该理解了函数可以作为参数传入,也可以当参数返回,而且还可以嵌套

装饰器其实就是对函数进行再次包装,它能够在不改变函数的前提下,增加函数的功能,可以在函数执行之前或者执行之后执行一段代码

a_stand_alone_function()

>>

Iamastandalonefunction,don’tyoudaremodifyme

a_stand_alone_function_decorated=my_new_decorator(a_stand_alone_function)

a_stand_alone_function_decorated()

>>

Beforethefunctionruns

Iamastandalonefunction,don’tyoudaremodifyme

Afterthefunctionruns2).使用装饰器

看这样简单吧,装饰器有一个语法糖@,直接@my_new_decorator就把上面一坨代码轻松化解了,这就是Pythonic的代码,简洁高效

其实相当于:

another_stand_alone_function=my_new_decorator(another_stand_alone_function)

4.为什么要使用装饰器装饰器提供了一些和代码维护性和审美相关的优点。并且作为结构化工具,装饰器自然地促进了代码的封装,这减少了冗余性并使得未来维护和扩展变得更容易。

如果大家学过Django和Flask就会知道,web框架里面大量的使用装饰器进行代码的封装.我们下面看一个简单的例子:

我们有一个主题函数word()是输出一个字符串,我们有一个函数是把字符串变粗体,另外一个是变斜体。有了装饰器之后,我们可以非常灵活的组合,扩展函数的功能:

输出hello有一点要注意,就是装饰器的顺序变了,结果是不一样的.

@makeitalic

@makebold

defword():

return“hello”

printword()

输出hello以上就是我对Python装饰器的一些个人总结,希望对你们有帮助。

python太难_传说中Python最难理解的点,看这完篇就够了相关推荐

  1. python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...

    https://mp.weixin.qq.com/s/B6pEZLrayqzJfMtLqiAfpQ 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是 ...

  2. python中最难的是什么_传说中Python最难理解的点|看这完篇就够了

    这是第66届原创文章的新手学习Python.60多篇文章已经写过新手的新手学习Python.它谈论很多有趣知识的点,但仍有一个整篇介绍性文章中最难的事.这些知识点很多书要么不谈这方面,或谈论太深奥.这 ...

  3. 传说中Python最难理解的点|看这完篇就够了

    ​ 今天我就带领大家由浅入深的去窥探一下,这个装饰器到底是何方神圣,看完本篇,装饰器就再也不是难点了. 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主 ...

  4. 问卷星自动填写python selenium脚本(2021vim版,亲测有效,看这一篇就够了)

    目录 前言 一.前期准备 二.具体步骤 1.导入库与预定义变量 2.打开浏览器,防止识别为脚本 3浏览问题,选择问题 4提交按钮,验证 全部代码 前言 问卷星已经成为收集问卷的一个很重要的工具,有时可 ...

  5. python自动操作微信_Python+Appium 自动化操作微信入门看这一篇就够了

    简介 Appium 是一个开源的自动化测试工具,支持 Android.iOS 平台上的原生应用,支持 Java.Python.PHP 等多种语言. Appium 封装了 Selenium,能够为用户提 ...

  6. pads pcb导出pdf文件_干货 | 学会设计不规则形状PCB,看这一篇就够了

    我们预想中的完整 PCB 通常都是规整的矩形形状.虽然大多数设计确实是矩形的,但是很多设计都需要不规则形状的电路板,而这类形状往往不太容易设计.本文介绍了如何设计不规则形状的 PCB. 如今,PCB ...

  7. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  8. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  9. python详细安装教程-超详细Python与PyCharm安装教程,看这一篇就够了

    原标题:超详细Python与PyCharm安装教程,看这一篇就够了 学习了三天的python, 之前测试一直用课程自带的网页版玩玩, 为了学习 然后就下载了一个python和pycharm 现在分享下 ...

最新文章

  1. C语言中长度为0的数组
  2. 逆向工程核心原理学习笔记(十二):分析abex' crackme #1
  3. 【今晚9点】:对话袁荣喜——一名C程序员的打怪之路
  4. 十大应用在数学的计算机语言
  5. 【Kafka】kafka 0.10.0 isr 不为空 但是不一致 导致获取消费组异常
  6. Cmake-add_library()
  7. 2019年最吸引攻击炮火的 Web 框架:WordPress 和 Apache Struts
  8. 36.MySQY 常用工具
  9. 生活情景英语:英语国家生存英语精选
  10. 【数字信号去噪】基于matlab小波软阈值+硬阈值+改进阈值数字信号去噪【含Matlab源码 1025期】
  11. C专家编程 第1章 C:穿越时空的迷雾 1.1 C语言的史前阶段
  12. layui省市区联动选择的实现
  13. 不意外:Facebook上市遭遇滑铁卢
  14. Codeforces 1293 E. Xenon‘s Attack on the Gangs —— 树上记忆化搜索,单点加改成区间加,有丶东西
  15. mt950报文解析_系列之五 | MT759报文升级内容解析
  16. 标签体系下的用户画像建设小指南
  17. GreenDao 使用详解(入门篇)
  18. JAVA JMS 简介
  19. [conda] 利用conda安装本地包
  20. 西安信息资源网(计算机电子书)

热门文章

  1. 可口的JAVA-并发控制之CountDownLatch
  2. javafx + jfoenix相关学习资料地址整理
  3. linux ubuntu/deepin与Windows时间不同步解决办法(双系统)
  4. sonarqube启动报错解决办法:Process exited with exit value [es]: 143
  5. ElementUI弹出新增窗口
  6. Dubbo 融合 Nacos 成为注册中心
  7. VS Code设置代码片段(C++)
  8. Android自定义属性 format详解
  9. 【总结】分类、聚类的评估指标
  10. 求方差时为什么要除以N—1,而不是除以N!【通俗理解-非数学专业】