Python成长之路【第五篇】:Python基础之装饰器

一、什么是装饰器

装饰:装饰既修饰,意指为其他函数添加新功能

器:器既函数

装饰器定义:本质就是函数,功能是为其他函数添加新功能

二、装饰器需要遵循的原则

1、不能修改装饰器的源代码(开放封闭原则)

2、为装饰器函数添加新功能后,不能修改函数的调用方式

三、实现装饰器的知识储备

装饰器 = 高阶函数 + 函数嵌套 + 闭包

四、高阶函数

高阶函数的定义:

1、函数接收的参数是一个函数名

2、函数的返回值是一个函数名

3、满足上述条件任意一个,都可以称为之高阶函数

 1 def foo():
 2     print(‘我的函数名作为参数传给高阶函数‘)
 3 def gao_jie1(func):
 4     print(‘我就是高阶函数1,我接收的参数名是%s‘ %func)
 5     func()
 6
 7 def gao_jie2(func):
 8     print(‘我就是高阶函数2,我的返回值是%s‘ %func)
 9     return func
10
11 gao_jie1(foo)
12 gao_jie2(foo)

高阶函数示范

 1 #高阶函数应用1:把函数名当做参数传给高阶函数
 2 import time
 3 def foo():
 4     print(‘from the foo‘)
 5
 6 def timmer(func):
 7     start_time=time.time()
 8     func()
 9     stop_time=time.time()
10     print(‘函数%s 运行时间是%s‘ %(func,stop_time-start_time))
11 timmer(foo)
12 #总结:我们确实为函数foo增加了foo运行时间的功能,但是foo原来的执行方式是foo(),现在我们需要调用高阶函数timmer(foo),改变了函数的调用方式

把函数名当做参数传给高阶函数

 1 #高阶函数应用2:把函数名当做参数传给高阶函数,高阶函数直接返回函数名
 2 import time
 3 def foo():
 4     print(‘from the foo‘)
 5
 6 def timmer(func):
 7     start_time=time.time()
 8     return func
 9     stop_time=time.time()
10     print(‘函数%s 运行时间是%s‘ %(func,stop_time-start_time))
11 foo=timmer(foo)
12 foo()
13 #总结:我们确实没有改变foo的调用方式,但是我们也没有为foo增加任何新功能

函数返回值是函数名

高阶函数总结:

1、函数接收的参数是一个函数名

  作用:在不修改函数源代码的前提下,为函数添加新功能

  不足:会改变函数的调用方式

2、函数的返回值是一个函数名

  作用:不修改函数的调用方式

  不足:不能添加新功能

五、函数嵌套

def foo(name):
    print("from foo %s" %name)
    def ret():
        print("from ret")
        def bar():
            print("from bar")
        bar()
    ret()

foo("Albert")

  

原文地址:https://www.cnblogs.com/albert0924/p/8760575.html

时间: 2024-10-16 14:04:01

Python成长之路【第五篇】:Python基础之装饰器的相关文章

python成长之路第三篇(1)_初识函数

目录: 函数 1.为什么要使用函数 2.什么是函数 3.函数的返回值 4.文档化函数 5.函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多代码是重复利用的,这样会使我们的代码变得异常臃肿,比如说: 我们要写一个验证码的功能 例子: 比如说我们要进行一些操作,而这些操作需要填写验证码 验证码代码:  1 import random   2 number_check = ''   3 for i in range(0,

python成长之路第三篇(4)_作用域,递归,模块,内置模块(os,ConfigParser,hashlib),with文件操作

打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.作用域 2.递归 3.模块介绍 4.内置模块-OS 5.内置模块-ConfigParser 6.内置模块-hashlib 7.with文件操作 代码执行环境默认为3.5.1 一.作用域 (1)什么是作用域,官方来说作用域就是就是有不同的命名空间,就像下面的代码一样,a=1它的作用域是全局的,也在全局的命名空间当中,当函数 action中的a=2它就在局部的作用域中,也在局部的命名空间当中. a = 1def

我的Python成长之路---第三天---Python基础(13)---2016年1月16日(雾霾)

五.Python的常用的内置函数 Python为我们准备了大量的内置函数,如下图所示 这里我们只讨论红框内的内置函数 abs(x) 返回一个数的绝对值(模),参数可以是真说或浮点数 >>> abs(-10) 10 all(iterable) 如果可迭代对象(列表.元祖等)中所有的元素都是True,则返回True,否则返回False.相当于and >>> all([1, True, 1 == 1]) True any(iterable) 如果可迭代对象中任意一个元素是Tr

python成长之路第三篇(2)_正则表达式

打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.什么是正则表达式,python中得正则简介 2.re模块的内容 3.小练习 一.什么是正则表达式(re) 正则表达式相信很多人都熟悉了,在python中正则表达式的支持是通过re(regular expression)模块,正则表达式是可以匹配文本片段的模式,简单的是正则表达式就是普通的字符串,可以处理字符串.也就是说正则表达式的存在就是来处理文本字符串的 下面来熟悉下正则中的几个概念: 1.通配符 通配符是

python成长之路【第九篇】:网络编程

一.套接字 1.1.套接字套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信.这就是所谓的进程间通信(Inter Process Communication,IPC).有两种类型的套接字:基于文件的和面向网络的. 第一种:基于文件的 因为两个进程运行在同一台计算机上,所以这些套接字都是基于文件的,这意味着文件系统支持他们的底层基础结构.这是能够说的通的,因为文件系统是一个运行在同一个主机上的多个进程之间的共享常量.第二种:基于网络的 基于

Python成长之路【第二篇】Python基础之数据类型

阅读目录 简介 1 什么是数据? x=10,10是我们要存储的数据 2 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3 数据类型 数字(整形,长整形,浮点型,复数) 字符串 列表 元组 字典 集合 4 如何学习 #一:基本使用 1 用途 2 定义方式 3 常用操作+内置的方法 #二:该类型总结 1 存一个值or存多个值 只能存一个值 可以存多个值,值都可以是什么类型 2 有序or无序 3 可变or不可变 !!!可变:值变,id不变.可变==不可hash

我的Python成长之路---第三天---Python基础(12)---2016年1月16日(雾霾)

四.函数 日常生活中,要完成一件复杂的功能,我们总是习惯把“大功能”分解为多个“小功能”以实现.在编程的世界里,“功能”可称呼为“函数”,因此“函数”其实就是一段实现了某种功能的代码,并且可以供其它代码调用. 假设我们在编程过程中需要计算圆形的面积.如果我们不是用函数,每次需要计算原型面积的时候都需要这样 1 r1 = 12.34 2 r2 = 9.08 3 r3 = 73.1 4 s1 = 3.14 * r1 * r1 5 s2 = 3.14 * r2 * r2 6 s3 = 3.14 * r

Python高手之路【五】python基础之正则表达式

下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print(result) 字符^:匹配以什么开头 import re st = 'python' result = re.findall('^py',st) print(result) 字符$:匹配以什么结尾 import re st = 'python' result = re.findall('n$',s

我的Python成长之路---第四天---Python基础(16)---2016年1月24日(寒风刺骨)

四.正则表达式 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它"匹配"了,否则,该字符串就是不合法的. 下面这张图展示了使用正则表达式匹配的流程 1.Python支持的正则表达式元

python学习之路-第五天-python的数据结构

数据结构 1. 列表 例子: #!/usr/bin/python # Filename: using_list.py # This is my shopping list shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I have', len(shoplist),'items to purchase.' print 'These items are:', # Notice the comma at end of the line