装饰器

装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何改动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。

装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。

开放封闭原则

1,对扩展是开放的

为什么要扩展开放?

答:任何一个程序,不可能在设计只初九已经想好了所有的功能并且未来不做任何更新和修改。所以我们必须               允许代码扩展、添加新功能。

2,对修改是封闭的

为什么要封闭修改?

答:因为我们写一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能              影响其他已经在使用该函数的用户。

装饰器的逐步理解。

第一步,我们需要在原函数的基础上添加功能,但是不能修改原函数。所以要写一个新函数,并在该函数中调用原函数。

在一个函数上添加功能固然是没问题,但是随着代码量的增加,可能会遇到必须在不同的函数上添加相同功能的情况。此时我们可以在新函数外再次添加一个函数,让不用的函数作为参数在函数中被装饰。

并且因为新函数嵌套在一个函数中,即便用原来的功能函数名赋值给新的功能函数名因为局部变量和全局变量不同,可以避免递归情况的出现。

这就是装饰器的基本操作了。

而在python中因为这样的操作过于频繁,官方给出了语法糖这样的便捷操作。

在python中语法糖的用法大致如下:

内置函数

python第13天的更多相关文章

  1. 十三. Python基础(13)--生成器进阶

    十三. Python基础(13)--生成器进阶 1 ● send()方法 generator.send(value) Resumes the execution, and "sends&qu ...

  2. 小白学 Python(13):基础数据结构(字典)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  3. 尚学python课程---13、python基础语法

    尚学python课程---13.python基础语法 一.总结 一句话总结: legend2系统使我能够快速掌握一门语法,特别有用 pass 语句:空语句:是为了保持程序结构的完整性  :作用:比如: ...

  4. python中13个实用的文件操作

    1. 判断指定目录是否存在: os.path.exists(input_folder) 2. 判断指定目录是不是文件夹 os.path.isdir(input_folder) 3. 判断指定目录是不是 ...

  5. 【循序渐进学Python】13.基本的文件I/O

    文件I/O是Python中最重要的技术之一,在Python中对文件进行I/O操作是非常简单的. 1. 打开文件 使用 open 函数来打开文件,语法如下: open(name[, mode[, buf ...

  6. python 练习 13

    #!/usr/bin/python # -*- coding: UTF-8 -*- l = [] for i in range(3): x = int(raw_input('integer:\n')) ...

  7. python(13)线程池:threading

    先上代码: pool = threadpool.ThreadPool(10) #建立线程池,控制线程数量为10 reqs = threadpool.makeRequests(get_title, da ...

  8. Python学习--13 文件I/O

    Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系 ...

  9. python note 13 内置函数

    1. lst = ["白蛇传","骷髅叹","庄周闲游"] it = lst.__iter__() print(it.__next__()) ...

随机推荐

  1. Spring Boot 2程序不能加载 com.mysql.jdbc.Driver 问题

    用Spring Boot Starter 向导生成了一个很简单SpringBoot程序, 用到了 MySQL, 总是下面不能加载 Mysql driver class 错误. Cannot load ...

  2. 21.Buffer Pool与压缩页/CheckPoint/LSN

    一. 思考题解析• 查看Buffer Pool中的Flush List不要在线上操作该SQL语句,开销较大 SELECT pool_id, lru_position, space, page_numb ...

  3. Volatile关键字理解

    Volatile定义 为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量.Java语言提供了volatile,在某些情况下比锁更加方便.如果一个字段被声明成volatile, ...

  4. localStorage用法

    引用:https://www.cnblogs.com/st-leslie/p/5617130.html const STORAGE_KEY = 'todos-vuejs'; export defaul ...

  5. “<textarea>”内的文字对齐

    转载:https://blog.csdn.net/henryzhang2009/article/details/9283803 转: textarea会把开始标签到结束标签里的内容全部原样显示,包括空 ...

  6. luogu P4491 [HAOI2018]染色

    传送门 这一类题都要考虑推式子 首先推出题目要求的式子,枚举正好有\(s\)个颜色的种类(范围\([0,p=min(\lfloor\frac{n}{s}\rfloor,m)]\)),然后对于后面的颜色 ...

  7. 第28月第11天 vim -b

    1. 首先以二进制方式编辑这个文件:        vim -b datafile现在用 xxd 把这个文件转换成十六进制:        :%!xxd文本看起来像这样:        0000000 ...

  8. org.apache.flume.conf.ConfigurationException: Channel c1 not in active set.

    1 错误详细信息 WARN conf.FlumeConfiguration: Could not configure sink k1 due to: Channel c1 not in active ...

  9. ECLIPSE最常用快捷键排名

    快捷键应该是节省时间的一个要素 ,所以自己在网上找了下面这些快捷键, 以便让更多的程序员更快捷的使用Eclipse. ECLIPSE最常用快捷键排名 1. Alt + / 自动完成 2. Ctrl + ...

  10. Django REST Framework API Guide 03

    本节大纲 1.Routers 2.Parsers 3.Renderers Routers Usage from rest_framework import routers router = route ...