python中函数,装饰器,迭代器,生成器

这篇具有很好参考价值的文章主要介绍了python中函数,装饰器,迭代器,生成器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.函数

1.函数可以作为参数进行传递

2.函数可以作为返回值进行返回

3.函数名称可以当成变量一样进行赋值操作

#1.函数可以作为参数进行传递
def force_fn(fn):    #其中参数fn为函数
    fn()             #执行此函数


#2.函数可以作为返回值进行返回
def func():
    def inner():
        print('123')
    return inner

ret = func()  #其中ret为函数inner
ret()         #执行ret函数


#3.函数名称可以当成变量一样进行赋值操作
def func1():
    print('函数1')
def func():
    print('函数2')
func1 = func2
func1() #此时输出 函数2

2.装饰器

作用:在不改变原有函数调用的情况下,给函数增加新的功能

         即可以在函数前面增加新的功能,但不改变原来的代码

#通用装饰器的写法:
def wrapper(fn):   #wrapper:装饰器, fn:目标函数
    def inner(*args,**kwargs):
        #在目标函数执行之前添加代码...
        ret = fn(*args,**kwargs)   #执行目标函数
        #在目标函数执行之后添加代码...
        return ret
    return inner


#使用装饰器
@wrapper   
def target():
    pass


注:一个函数可以使用多个装饰器
@wrapper1
@wrapper2
def target():
    pass

执行顺序(嵌套规则): wrapper1 wrapper2 target wrapper1 wrapper2

3.迭代器

可迭代的数据类型都会提供迭代器,即可以使⽤for来循环遍历的对象就是可迭代对象。

 什么是迭代器?

import collections
a = [1,2,3]

b1 = iter(a)         
b2 = a.__iter__()
#b1,b2为迭代器 

#将列表转为迭代器
c1 = list(b1)
c2 = list(b2)
#c1,c2为列表

import collections
print(isinstance(b1, collections.Iterator))   判断是否迭代器
print(isinstance(a, collections.Iterable))    判断是否可迭代对象
迭代器一定是可迭代对象,可迭代对象不一定是迭代器

迭代器优点:

        1.只能向前,不能反复

        2.特别节省内存,一次次迭代出数据

        3.惰性机制,调用一次next,出来一个数据 

获取迭代器的两种方案:

        1.iter()内置函数

        2.__iter__() 特殊方法

从迭代器中拿到数据:

        1.next() 内置函数

        2.__next__() 特殊方法

a = '123'

b1 = iter(a)         
b2 = a.__iter__() 
#b1,b2为迭代器   

#迭代器只能单向迭代,不可循环迭代
print(next(b1))
print(next(b1))
print(next(b1))

print(b2.__next__())
print(b2.__next__())
print(b2.__next__())

4.生成器

生成器的本质就是迭代器

创建生成器的两种方案:

       1. 生成器函数 

        2. 生成器表达式

1.生成器函数

        生成器函数中有一个关键字yield

        生成器函数执行的时候, 并不会执行函数, 得到的是生成器.

        yield: 只要函数中出现了yield. 它就是一个生成器函数

        作用: 1. 可以返回数据

                 2. 可以分段的执行函数中的内容, 通过__next__()可以执行到下一个yield位置 文章来源地址https://www.toymoban.com/news/detail-734030.html

#生成器函数
def order():
    lst = []
    for i in range(10000):
        lst.append(f"衣服{i}")
        if len(lst) == 50:
            yield lst       #相当于return,但是他返回的数据需要使用迭代器__next__()读取
            # 下一次拿数据
            lst = []


gen = order()
print(gen.__next__())
print(gen.__next__())

#生成器表达式
gen = (i**2 for i in range(10))

for item in gen:
    print(item)

lst = list(gen)  #此时为空列表,应为生成器中的东西被拿完了
print(lst)
 
                    

到了这里,关于python中函数,装饰器,迭代器,生成器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python教程(26)——Python迭代器和生成器详解

    Python中的迭代器是一种对象,它可以迭代(遍历)一个可迭代对象(比如列表、元组或字符串)的元素。迭代器用于实现迭代器协议,即包含 __iter__() 方法和 __next__() 方法。 迭代器的工作原理是每次调用 __next__() 方法时返回可迭代对象的下一个元素,当没有元素可迭代时,抛

    2024年02月19日
    浏览(45)
  • 3.0 Python 迭代器与生成器

    当我们需要处理一个大量的数据集合时,一次性将其全部读入内存并处理可能会导致内存溢出。此时,我们可以采用迭代器 Iterator 和生成器 Generator 的方法,逐个地处理数据,从而避免内存溢出的问题。 迭代器是一个可以逐个访问元素的对象,它实现了 python 的迭代协议,即

    2024年02月13日
    浏览(42)
  • Python中的迭代器与生成器

    在Python中,迭代器(Iterator)和生成器(Generator)是两种用于处理可迭代对象的重要工具。而可迭代对象包括列表,元组,字典,字符串等。 迭代器和生成器只能迭代一次,通常用于处理大型数据集,因为它们不会一次性加载所有数据到内存中,而是根据需要逐个生成值。

    2024年02月10日
    浏览(47)
  • 8 python的迭代器和生成器

    概述         在上一节,我们介绍了Python的模块和包,包括:什么是模块、导入模块、自定义模块、__name__、什么是包、创建包、导入包等内容。在这一节中,我们将介绍Python的迭代器和生成器。在Python中,迭代器是一个非常重要的概念,它使得我们能够遍历一个序列而无

    2024年02月10日
    浏览(41)
  • Python迭代器与生成器研究记录

    迭代器肯定是可迭代对象,但是可迭代对象不一定是迭代器,生成器一定是迭代器,但是迭代器不一定是生成器 生成器是特殊的迭代器,所以生成器一定是迭代器,迭代器一定是可迭代对象 我们平常接触最多的对象中,字符串,字典,列表,集合,元组和open打开的文件对象

    2024年02月05日
    浏览(57)
  • Python小姿势 - ## Python中的迭代器与生成器

    Python中的迭代器与生成器 在Python中,迭代是一个非常重要的概念,迭代器和生成器是迭代的两种最常见的形式。那么,迭代器与生成器有何不同呢? 首先,我们先来了解一下迭代器。 迭代器是一种对象,它可以记住遍历的位置,并在每次访问时返回下一个元素。迭代器只能

    2024年02月04日
    浏览(58)
  • Python基础篇(十):迭代器与生成器

    迭代器和生成器是Python中用于 处理可迭代对象 的重要概念。它们提供了一种有效的方式来 遍历和访问 集合中的元素,同时具有 节省内存和惰性计算 的特点。下面是关于迭代器和生成器的详细介绍和示例: 迭代器是一种实现了迭代协议的对象,它可以用于遍历集合中的元素

    2024年02月10日
    浏览(45)
  • 【Python】Python系列教程-- Python3 迭代器与生成器(二十)

    往期回顾: Python系列教程–Python3介绍(一) Python系列教程–Python3 环境搭建(二) Python系列教程–Python3 VScode(三) Python系列教程–Python3 基础语法(四) Python系列教程–Python3 基本数据类型(五) Python系列教程-- Python3 数据类型转换(六) Python系列教程-- Python3 推导式(

    2024年02月08日
    浏览(67)
  • python使用迭代生成器yield减少内存占用的方法

    在python编码中for循环处理任务时,会将所有的待遍历参量加载到内存中。 其实这本没有必要,因为这些参量很有可能是一次性使用的,甚至很多场景下这些参量是不需要同时存储在内存中的,这时候就会用到本文所介绍的迭代生成器yield。 首先我们用一个例子来演示一下迭代

    2024年04月28日
    浏览(31)
  • 【Python 4】列表与元组slice切片 迭代 列表生成式 生成器generator 迭代器Iterator对象

    在Python中,代码不是越多越好,而是越少越好 取一个list或tuple的部分元素是非常常见的操作 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作 L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3 如果第

    2024年02月07日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包