装饰器

装饰器本质上就是一个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. npm i 与 npm install之间的细小区别

    1.用npm i 安装的模块无法用npm uninstall卸载,需要用npm uninstall i命令 2.npm i 会帮助检测与当前node版本最匹配的npm包 版本号,并匹配出来相互依赖的n ...

  2. termios结构体各成员的值(FreeBSD 12.0)

    一.文件位置 /usr/include/sys/_termios.h 二.文件内容 /*- * SPDX-License-Identifier: BSD-3-Clause * * Copyright ...

  3. Groovy 设计模式 -- Strategy 模式

    策略模式 https://en.wikipedia.org/wiki/Strategy_pattern In computer programming, the strategy pattern (a ...

  4. hackrf入门

    http://www.hackrf.net/hackrf%E4%B8%8Egnuradio%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/

  5. js apply使用

    js中apply方法的使用 1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是:  Object.extend = function(destinati ...

  6. Django之CRM项目Day6-公私户转换问题解决 班主任功能

    1.解决公户转私户的问题 数据库中加锁: ​ begin; 开始事务 ​ select * from user where id=1 for update; 加锁 ​ commit; 结束事务 dja ...

  7. luogu P2520 [HAOI2011]向量

    传送门 一堆人说数论只会gcd,我连gcd都不会,菜死算了qwq Orzyyb 这题欺负我数学不好qwq 首先可以发现实际上有如下操作:x或y±2a,x或y±2b,x+a y+b,x+b y+a(后面 ...

  8. 不使用setCustomView,设置ActionBar标题居中

    仅供参考,有太多自定义标题栏需求时,还是建议使用setCustomView https://blog.csdn.net/chiceT/article/details/50455358

  9. MySql cmd下的学习笔记 —— 引擎和事务(engine,transaction)

    engine 引擎就是MySQL存储数据的不同方式 myisam 插入速度快 支持全文索引 innoDB 插入速度慢 支持事务安全 假设两人同时购买火车票,两人同时看到只有一张火车票,几乎同时下单 或 ...

  10. Django中间件基础笔记

    django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的se ...