Python(72)_生成器函数与装饰器复习

1  装饰器复习,注意打印的顺序

#-*-coding:utf-8-*-
import os
import time
‘‘‘
语法糖
‘‘‘
def wrapper(f):  # 装饰器函数 ,f是被装饰的函数
    def inner(*args,**kwargs):  # 定义了内部函数,一定和return inner对应
        ‘‘‘ 在被装饰函数执行前要做的事情‘‘‘
        print(‘在被装饰函数执行前要做的事情‘)
        ret = f(*args,**kwargs) # 这句话是真正函数的执行
        ‘‘‘ 在被装饰函数执行后要做事情‘‘‘
        print(‘在被装饰函数执行后要做事情‘)
        return  ret
    return inner
@wrapper  #装饰器函数 相当于  func = wrapper(func)
def func(day): # 被装饰的函数
    time.sleep(0.01)
    print(‘全体放假%s天‘%day)
    return ‘好开心‘
print(func(10))



2   聚合与散

def outer(*args,**kwargs):
    print(args)  # 元组 (1, 3, 5, 6)
    print(*args) # 1 3 5 6  *在print函数里能用,打散。和传参的*作用的等价的
    def inner(*args):  # 聚合成1234
        print(‘inner:‘,args)   #(1, 3, 5, 6)
    inner(*args)

outer(1,3,5,6)  # = outer(*[1,2,3, 4])
#outer(*[1,2,3, 4])



3  普通函数

#-*-coding:utf-8-*-
import os
import time
‘‘‘
生成器函数
‘‘‘
def generator():
    print(1)
    return ‘a‘

ret = generator()
print(ret)



4、生成器的定义

#-*-coding:utf-8-*-
import os
import time
‘‘‘
生成器函数
   1、含有yield关键字的函数
   2、yield不能和return共用,且需要写在函数内部
‘‘‘
def generator():
    print(1)
    yield ‘a‘
# 生成器函数执行后会得到一个生成器作为返回值   <generator object generator at 0x7f794e030200>
ret = generator()
print(ret)
# ret.__next__()  迭代器 ,迭代器一般不同,用for循环就可以了
print(ret.__next__()) # 触发生成器里面的代码



5、for循环与迭代器和生成器的关系

#-*-coding:utf-8-*-
import os
import time
‘‘‘
生成器函数
   1、含有yield关键字的函数
   2、yield不能和return共用,且需要写在函数内部
   3、yield和next配合,迭代器,生成器
‘‘‘
def generator():
    print(1)
    yield ‘a‘
    print(2)
    yield ‘b‘
    yield ‘c‘
# 生成器函数执行后会得到一个生成器作为返回值   <generator object generator at 0x7f794e030200>
ret = generator()   # 这是生成器,上面是生成器函数
print(ret)
# ret.__next__()  迭代器 ,迭代器一般不同,用for循环就可以了
# print(ret.__next__()) # 触发生成器里面的代码
# print(ret.__next__())
# print(ret.__next__())

for i in ret:
    print(i)



6、哇哈哈函数

def wahaha():
    for i in  range(2000):
        yield ‘哇哈哈%s‘%i

g = wahaha()  # 生成器
count = 0
for i in g:
    count +=1
    print(i)
    if count >50:
        break;
print(‘*******‘,g.__next__())



7、方法  __name__ 与 __doc__

def wahaha():
    ‘‘‘
    一个打印哇哈哈的函数
    :return:
    ‘‘‘
    for i in  range(2000):
        yield ‘哇哈哈%s‘%i

g = wahaha()  # 生成器
count = 0
for i in g:
     count +=1
    # print(i)
    # if count >50:
    #     break;
print(‘*******‘,g.__next__())
print(wahaha.__name__)
print(wahaha.__doc__)



8、方法  __name__ 与 __doc__ 升级

#-*-coding:utf-8-*-
import os
import time
from functools import wraps
‘‘‘
‘‘‘
def wrappper(func):
    @wraps(func)  # 固定的,func传进去
    def inner(*args,**kwargs):
        print("前")
        ret = func(*args,**kwargs)
        print("后")
        return  ret
    return inner
@wrappper   # 不可少!
def holiday(day):
    ‘‘‘
    这是一个放假通知
    :param day:
    :return:
    ‘‘‘
    print(‘全体放假%s天‘%day)
    return ‘好开心‘
holiday(10)
print(holiday.__name__)
print(holiday.__doc__)

原文地址:https://www.cnblogs.com/sunnybowen/p/10269217.html

时间: 2024-08-27 15:52:49

Python(72)_生成器函数与装饰器复习的相关文章

python 基础篇 11 函数进阶----装饰器

11. 前??能-装饰器初识本节主要内容:1. 函数名的运?, 第?类对象2. 闭包3. 装饰器初识 一:函数名的运用: 函数名是一个变量,但他是一个特殊变量,加上括号可以执行函数. ?. 闭包什么是闭包? 闭包就是内层函数, 对外层函数(非全局)的变量的引?. 叫闭包 可以使用_clesure_检测函数是否是闭包  返回cell则是闭包,返回None则不是 闭包的好处: 由它我们可以引出闭包的好处. 由于我们在外界可以访问内部函数. 那这个时候内部函数访问的时间和时机就不?定了, 因为在外部,

Python基础(7)闭包函数、装饰器

一.闭包函数 闭包函数:1.函数内部定义函数,成为内部函数, 2.改内部函数包含对外部作用域,而不是对全局作用域名字的引用 那么该内部函数成为闭包函数 #最简单的无参闭包函数 def func1() name='ares' def func2() print(name) #有参和返回值的闭包函数 def timmer(func): def wrapper(*args,**kwargs): start_time = time.time() res=func(*args,**kwargs) stop

python函数、装饰器、迭代器、生成器

5月21日,请假结婚,然后性格惰性来了,不怎么想看视频和笔记,性格中的弱点开始出现,开始做的不错,渐渐开始松懈,直至放弃--- 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象:  函数是第一类对象,即函数可以当作数据传递,它的应用形式也被称为高阶函数,函数的特性如下: a. 可以被引用 1 # def foo(): 2 # print('from foo') 3 # 4 # func = foo

python学习笔记4:高阶函数,装饰器,生成器,迭代器

一.高级函数1.把一个函数名当作实参传给另一个函数2.返回值包含函数名>>> def bar():... print ("in the bar")... >>> def foo(func):... res=func()... return res... >>> foo(bar)in the bar 二.嵌套函数在函数中定义另一个函数 三.装饰器装饰器本质上是函数,作用是装饰其他函数,就是为其他函数添加附加功能.原则1:不能修改被装饰

python之路——第二块(装饰器、生成器、迭代器)

装饰器 def deco(count): def func(num): if num < 10: count(num) else: exit() return func @deco def count(num): a = 0 for i in range(num): a += i print(a) count(11) 注:deco(count)和下面的count(num)中的count只是一个形参,count可以用任何变量名替换,但是num是一定要有,因此传入的实参是被装饰函数,被装饰函数有nu

python day4笔记 常用内置函数与装饰器

1.常用的python函数 abs             求绝对值 all               判断迭代器中所有的数据是否为真或者可迭代数据为空,返回真,否则返回假 any             判断迭代器中的数据是否有一个为真,有返回真,可迭代数据为空或者没有真,返回假 bin             转换整数为二进制字符串 hex            转换整数为十六进制字符串 oct             转换整数为八进制字符串 bool           转换数据为布尔值

python学习笔记之函数总结--高阶函数以及装饰器

python学习笔记之函数总结--高阶函数以及装饰器 Python特点: 1.不是纯函数式编程(允许变量存在): 2.支持高阶函数(可以传入函数作为变量): 3.支持闭包(可以返回函数): 4.有限度的支持匿名函数: 高阶函数: 1.变量可以指向函数: 2.函数的参数可以接收变量: 3.一个函数可以接收另一个函数作为参数: 下面我将示例一些函数的写法以及使用,并说明python中函数的特性: 1.基本的高阶函数示例: #!/usr/bin/env python def func():      

五、python函数、装饰器、内置函数、json及模块

一.递归调用 1.一个函数自己调用自己就是递归调用,最多一个函数递归调用自己999次,超过就会出错2.递归必须有一个明确的结束条件3.每次进入更深一层递归时,问题规模相比上次递归都应有所减少4.递归效率不高,少用递归 eg:def test1(): num = int(input('please enter a number:')) if num%2==0:#判断输入的数字是不是偶数 return True #如果是偶数的话,程序就退出了,返回true print('不是偶数请重新输入!') r

Python入门之函数的装饰器

本章目录: 装饰器: 一.为什么要用装饰器 二.什么是装饰器 三.无参装饰器 四.装饰器语法糖 五.认证装饰器实现 六.叠加多个装饰器 七.带参装饰器 =========================================================== 一.开放封闭原则 引子--为什么要用装饰器 软件一旦上线后,对修改源代码是封闭的,对功能扩展是开放的. 也就是说我们必须找到一种解决方案: 能够在不修改一个功能源代码以及调用方式的前提下,为其加上新功能 总结,原则如下: 1.不