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

装饰器



1.速查笔记

#-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成
        @staticmethod
        def smeth(x): print(x)
    # 等同于:
        def smeth(x): print(x)
        smeth = staticmethod(smeth)  

定义:在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)

经典示例:

# -*-  coding:utf-8 -*-
import time
def timer(func): #把被装饰的函数ceshi的内存地址传给了func
    def deco(*args,**kwargs):
        start_time = time.time()
        func(*args,**kwargs)
        stop_time = time.time()
        print(‘测试函数运行时间‘,(stop_time-start_time))
    return deco #返回deco的内存地址

@timer
def ceshi(a):
    time.sleep(3)
    print(‘测试%s‘%a)
ceshi(‘装饰器‘)

2. 原则:①不能修改被装饰函数的源代码;②不能修改被装饰函数的调用方式

3.实现装饰器的技能储备

① 函数本身即是变量

② 高阶函数,把一个函数名当做实参穿给另一个函数

③ 嵌套函数

参考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000

生成器



1.速查笔记

#-- 生成器函数:yield VS return
    def gensquare(N):
        for i in range(N):
            yield i** 2                 # 状态挂起 可以恢复到此时的状态
    for i in gensquare(5):              # 使用方法
        print(i, end = ‘ ‘)             # [0, 1, 4, 9, 16]
    x = gensquare(2)                    # x是一个生成对象
    next(x)                             # 等同于x.__next__() 返回0
    next(x)                             # 等同于x.__next__() 返回1
    next(x)                             # 等同于x.__next__() 抛出异常StopIteration  

#-- 生成器表达式:小括号进行列表解析
    G = (x ** 2 for x in range(3))      # 使用小括号可以创建所需结果的生成器generator object
    next(G), next(G), next(G)           # 和上述中的生成器函数的返回值一致
    #(1)生成器(生成器函数/生成器表达式)是单个迭代对象
    G = (x ** 2 for x in range(4))
    I1 = iter(G)                        # 这里实际上iter(G) = G
    next(I1)                            # 输出0
    next(G)                             # 输出1
    next(I1)                            # 输出4
    #(2)生成器不保留迭代后的结果
    gen = (i for i in range(4))
in gen                            # 返回True
in gen                            # 返回True
in gen                            # 返回False,其实检测2的时候,1已经就不在生成器中了,即1已经被迭代过了,同理2、3也不在了  

2. 生成器表达式

局限性:只能适合简单的算法

示例:

test = (x**2 for x in range(1,10))
print(next(test))
print(test.__next__())

3. 生成器函数 yield

斐波那契函数的打印示例:

def fib(max):
    a,b,n = 1,1,0
    while n<max:
        yield b
        a,b = b,a+b
        n+=1
    return b
test = fib(10)
print(test.__next__())
print(next(test))
for i in test:
    print(i)

原文地址:https://www.cnblogs.com/wuzhiming/p/8988427.html

时间: 2024-08-26 01:39:31

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

python3 速查参考- python基础 8 -&gt; 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)

基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self.name = name def __del__(self): # 函数属性:析构函数 print("goodbey ", self.name) I1 = C1('bob') #-- Python的类没有基于参数的函数重载 class FirstClass: def test(self,

Python学习之路-装饰器&生成器&正则表达式

装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器, def login_decorator(func):     def inner():         if USER_TEMP["status"] == False:             print("\033[31;1m用户未登录,请先登录\033[0m")             login_atm()

python基础三大器之装饰器

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

python 基础篇 12 装饰器进阶

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

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基础四:装饰器

装饰器本质:就是函数,功能是为其他函数添加附加功能 装饰器原则: 不修改被修饰函数的源代码 不修改修饰函数的调用方式 装饰器的知识储备: 装饰器 = 高阶函数 + 函数嵌套 + 闭包 初识装饰器 先看一个需求:下面这个函数用来计算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基础——函数的装饰器

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

python 3.x 的装饰器笔记

今天学到了python的装饰器,感觉这个东西还是稍微有些复杂,所以记录下来,方便以后的查找.虽然标题是python 3.x的装饰器,但是我也没有怎么用过python 2.x,感觉上应该是和python 2.7在用法上差不多. 现在某个视频公司有一段代码,,代码的主要功能就是看电影. 1 def watchfilm(): 2 print('You are watching film now....') 3 4 watchfil() 运行之后输出: You are watching film now

Python 函数式编程、装饰器以及一些相关概念简介

Python 中的 Decorator(装饰器) 是对一个函数或者方法的封装,从而使其可以完成一些与自身功能无关的工作. 预备知识 一切皆对象 在 Python 中,所有的一切都被视为对象,任何的变量.函数.类等都是 object 的子类.因此除了变量之外,函数和类等也可以被指向和传递. >>> def foo(): ... pass ... >>> def Foo(): ... pass ... >>> v = foo >>> v