python闭包函数&生成器&迭代器

本文介绍了Python中的闭包函数及其作用,包括内部函数对外部变量的访问和装饰器的应用。同时,详细阐述了生成器的概念,通过示例解释了yield关键字如何实现函数的暂停与恢复,并展示了生成器在内存管理和迭代操作中的优势。此外,还探讨了迭代器的基本操作,如iter()和next()方法的使用。
摘要由CSDN通过智能技术生成

闭包函数

1、什么是闭包函数
一个函数的返回值是另外一个函数,返回的函数调用父函数内部的其他变量,
如果返回的函数在外部被执行,就产生了闭包
2、闭包函数的意义及作用
作用:使函数外部能够调用函数内部定义的变量
3、闭包函数优缺点:
优点:内部函数和局部变量都可以在外部使用
缺点:闭包操作导致整个函数的内部环境,被长久保存,占用大量的内存

装饰器实质就是一个闭包函数

"""闭包函数表示形式1   内部函数的局部变量可以在外部访问"""
name1="python2"
def fun1():
    name2='python3'
    def inner():
        print(name2)
    return inner
print(name1)
result=fun1()
print(type(result))
# 执行返回函数
result()

"""闭包函数表示形式2  内部函数可以通过外部访问"""
def fun2():
    name2='python3'
    def inner():
        print("执行内置函数inner")
    def all():
        return inner
    return all

result=fun2()
fuc=result()
print("内部函数可以通过外部访问",type(fuc))
fuc()

生成器

一、什么是生成器
函数中包含yield,这样的函数叫做生成器
普通函数和包含yield函数(生成器)的区别:
生成器返回迭代器的函数,生成器就是迭代器
执行规则:
生成器运行时,每次遇到yield时函数会暂停并保存当前所有运行信息,
返回yeild值,并在下一次迭代(next())的时候从当前位置继续执行

在这里插入图片描述

# 如果普通函数里面使用了yield关键字就变成了生成器
# 生成器的定义和使用
def func():
	print(1)
	print(2)
	yield "卡点1"
	print(3)
	yield "卡点2"
	print(4)
	print(1)
	yield "卡点3"
	print(1)
	print(1)
	yield "卡点4"
# 生成器当中可以有一个或者多个yield关键字
# yield关键字的功能:
# 可以返回一个值(跟return关键字一样)
# 当函数执行完毕之后,下次再进行调用会从yield后面开始继续执行代码
# 生成器的执行方式和普通函数不一样
i = func() # i代表的是一个生成器对象
# 通过使用next()内建函数进行执行生成器
print("第1次执行")
print(next(i))
print("第2次执行")
print(next(i))
print("第3次执行")
print(next(i))
print("第4次执行")
print(next(i))




```python
def func(n):
    
    a = 1
    while a < n:
        yield a
        a += 1


f = func(10)
for i in f:
    print(i)

try:
    while True:
        print(next(f))
except StopIteration:
    pass

import sys

def fibonacci(n):
    """生成器"""
    a=0
    b=1
    counter =0
    while True:
        if (counter > n):
            return
        yield a

        a,b=b,a+b   #a=0  b=1

        a=b
        b=a+b
        # temp=a
        # a=b
        # b=temp+b
        counter += 1

f = fibonacci(10)    #f是迭代器对象
# 第一遇到yeild  a=0  返回a的值

while True:
    try:
        print(next(f), end=" ")
        #第一遍历执行  next(f)   返回值 a=0 a=1  a=1 a=2  a=3  a=5  a=8
    except StopIteration:
        sys.exit()

迭代器

二、什么是迭代器?
迭代器访问结合元素的一种方式,迭代器只能往前不能往后退
字符串、列表、元组都是可以创造成迭代器
[1,2,3,4,5]
迭代器有两个基本的方法:iter() next()

list1=[1,2,3,4,5]
try:
    it=iter(list1)  #创建迭代对象
    print(next(it))   #1
    print(next(it))    #2
    print(next(it))
    print(next(it))
    print(next(it))
    print(next(it))
    print(next(it))
    print(next(it))
except StopIteration:
    print("已经遍历完成")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值