Step4 - Python基础4 迭代器、装饰器、软件开发规范

1.装饰器

定义:本质是函数,就是为其他函数添加附加功能

原则:1.不能修改被装饰的函数的源代码

   2.不能修改被装饰的函数的调用方式

例子:

import time

def timer(func):
    def warpper(*args,**kwargs):
        start_time = time.time()
        func()
        stop_time = time.time()
        print("the func run time is %s" % (stop_time-start_time))
    return warpper

@timer #实际功能相当于func1 = timer(func1)
def func1():
    time.sleep(3)
    print("in the test1")

func1()

#结果
#in the test1
#the func run time is 3.0005111694335938

该函数满足装饰器的所有要求

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

高阶函数:

把一个函数名当做实参传给另外一个函数;返回值中包含函数名

def func1(func):
    print(func)

def func2():
    print(1)

func1(func2)

嵌套函数:

在一个函数的函数体内定义另一个函数

def func1():
    print("in the func1")

    def func2():
        print("in the func2")

    func2()

func1()

我的理解:

装饰器的实现方式,本质就是改变原函数的内存地址。通过高阶函数的返回值,将嵌套函数的内存地址赋给了原函数,而原函数的功能被记录在了嵌套函数中,通过嵌套函数添加了新功能,而且不改变源代码及原函数的调用方式。func1函数实际上已经变成了warpper函数,warpper函数的功能=func1原来的功能+添加的功能。但是func1的功能将会被永远改变,无法再单独实现func1的功能。

那如果函数要传参数进去怎么办呢?

简单!加个非固定参数就搞定了!

import time

def timer(func):
    def warpper(*args, **kwargs):
        start_time = time.time()
        func(*args, **kwargs)
        stop_time = time.time()
        print("the func run time is %s" % (stop_time - start_time))

    return warpper

@timer
def func1():
    time.sleep(1)
    print("in the test1")

@timer
def func2(*args, **kwargs):
    print(args, kwargs)

func1()
func2("Nick", daizhi="22", sex="male")
时间: 2024-10-11 12:28:11

Step4 - Python基础4 迭代器、装饰器、软件开发规范的相关文章

python基础三大器之装饰器

闭包 由于闭包这个概念比较难以理解,尤其是初学者来说,相对难以掌握,所以我们通过示例去理解学习闭包. 给大家提个需求,然后用函数去实现:完成一个计算不断增加的系列值的平均值的需求. 例如:整个历史中的某个商品的平均收盘价.什么叫平局收盘价呢?就是从这个商品一出现开始,每天记录当天价格,然后计算他的平均值:平均值要考虑直至目前为止所有的价格. 比如大众推出了一款新车:小白轿车. 第一天价格为:100000元,平均收盘价:100000元 第二天价格为:110000元,平均收盘价:(100000 +

python 基础篇 12 装饰器进阶

本节主要内容:1. 通?装饰器回顾2. 函数的有?信息3. 带参数的装饰器4. 多个装饰器同时装饰?个函数 ?. 通?装饰器的回顾开闭原则: 对增加功能开放. 对修改代码封闭装饰器的作?: 在不改变原有代码的基础上给?个函数增加功能通?装饰器的写法: 执行过程: 其实执行  target_func()就是执行inner函数.  inner函数会先执行目标函数之前的代码,然后执行目标函数,之后再执行目标函数之后的代码. 如何获取函数的有用信息: 函数名.__name__可以查看函数名字 函数名._

python3 速查参考- python基础 -> 函数编程之 装饰器、生成器

装饰器 1.速查笔记 #-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成 @staticmethod def smeth(x): print(x) # 等同于: def smeth(x): print(x) smeth = staticmethod(smeth) 定义:在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator) 经典示例: # -*- coding:utf-8 -*- import time

python基础四:装饰器

装饰器本质:就是函数,功能是为其他函数添加附加功能 装饰器原则: 不修改被修饰函数的源代码 不修改修饰函数的调用方式 装饰器的知识储备: 装饰器 = 高阶函数 + 函数嵌套 + 闭包 初识装饰器 先看一个需求:下面这个函数用来计算1到20的和 def calc(l): res = 0 for i in l: time.sleep(0.01) res += i return res result = calc(range(1,21)) print(result) 但现在需求有变,不仅要计算1到20

python基础-函数之装饰器、迭代器与生成器

1. 函数嵌套 1.1 函数嵌套调用 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数 def bar(): print("from in the bar.") def foo(): print("from in the foo.") bar() foo() 1.2 求函数最大值 def max2(x,y): if x > y: return x else: return y def max4(a,b,c,d): res1 = max2(a,b) re

Python基础——函数的装饰器

等待更新…………………… 后面再写 原文地址:https://www.cnblogs.com/mashangsir/p/11330234.html

Python_Day5_迭代器、装饰器、软件开发规范

本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 1.列表生成式,迭代器&生成器 列表生成 >>> a = [i+1 for i in range(10)] >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访

Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########## def orter(func):    #定义装饰器     de

Python之路(六):迭代器,装饰器,生成器

python基础之迭代器和生成器 迭代器 迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退) 实现了迭代器协议的对象(对象内部定义了一个__iter__()方法) python中的内部工具(如for循环,sum,min,max函数等)基于迭代器协议访问对象. 1 #基于迭代器协议 2 li = [1,2,3] 3 diedai_l = li.__iter__() 4 print(died