python三大器

迭代器
1.1、判断可迭代对象

from collections import Iterable
# 判断对象是否是可迭代对象
result = isinstance(X, Iterable)
print("X是否是可迭代对象:", result)
# >> X是否是可迭代对象: True

1.2、自定义迭代器
自定义迭代器对象: 在类里面提供__iter__和__next__方法创建的对象就是迭代器。

class StudentIterator(object):
    # 构造方法
    def __init__(self, my_list):
        self.my_list = my_list
    # 标志1
    def __iter__(self):
        return self
    # 标志2,获取迭代器中下一个值
    def __next__(self):
        if self.current_index < len(self.my_list):
            value = self.my_list[self.current_index]
            # 取值完成以后需要对下标加上1
            self.current_index += 1
            return value
        else:
            # 超出范围抛出停止迭代的异常
            raise StopIteration
# 迭代器被__iter__调用,返回一个迭代器

2、生成器
2.1 生成器创建方式1
把列表推导式的中括号改成小括号创建的对象就是生成器。生成器:生成器是一个特殊的迭代器,也就是说可以使用next和for循环取值

generator = (i * 2 for i in range(5))
print(generator)
#获取下一个值
value = next(generator)
print(value)
# 取所有值
for value in generator:
    print(value)

2.2 生成器创建方式2
在def里面看到yield关键字表示就是一个生成器

# 定义生成器
   def fibonacci(num):
        # num: 表示斐波那契数列的个数
        # 保存前两个值
        a = 0
        b = 1
        # 记录生成数列的下标
        current_index = 0
        # 循环判断条件是否成立
        while current_index < num:
            # 记录当前斐波那契数值
            result = a
            #生成下一个斐波那契数值,即b,但下一次输出a
            a, b = b, a + b
            current_index += 1
            #代码执行到yield会暂停,把结果返回出取,再次启动生 成器的时候会在暂停的位置继续往下执行
            yield result
# 生成器返回类型是特殊的迭代器(生成器)需要for/next()取值
generator = fibonacci(3)
for value in generator:
    print(value)

3、装饰器
3.1闭包
1、在一个函数里边定义了一个函数
2、内函数可能会用到外函数的数据
3、外函数一定有返回值,而且是内函数的引用

# 外函数outer()
def outer():
    # 外函数局部变量,对于内函数来说相当于全局变量
    number = 10
    # 内函数	
    def inner():
        # 外函数数据的引用		
        nonlocal number		
        number += 1
    # 返回值是内函数inner的引用
    return inner		

# 调用outer函数,用func接收inner函数的引用
func = outer()
# 调用inner函数		
func()	

1、装饰器定义:
闭包的延伸,外函数传入函数的引用,而且内函数返回函数的调用就是装饰器
2、作用:
在不修改函数体的前提下,在函数前面添加功能比如验证等
3、原理:
直接调用内函数,先执行内函数函数体,即验证的部分,在内函数的返回值的地方返回传入函数的调用,即不被修改的函数体。

def outer(func):
    def inner():
        return func()
    return inner
# 装饰器的使用  @ :相当于 func = outer(func) 
# 即把func的引用替换成outer的返回值,也就是内函数的引用
# 然后在内函数中返回原本func的引用的调用,即func的函数体
@outer
def func():
    pass

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python大器是装饰器、迭代器和生成器。装饰器是一种可以在不改变代码的基础上给函数添加新功能的工具。可以在原有操作前面或后面随意添加新的功能。通过在函数上使用@符号为函数应用装饰器,从而实现给函数添加新功能的目的。迭代器是一种用于遍历可迭代对象的对象。可以通过调用__iter__()方法获取迭代器,也可以使用iter()函数来获取迭代器。迭代器提供了__next__()方法用于逐个返回元素,并在没有元素可返回时引发StopIteration异常。生成器是一种特殊的迭代器,用于自动生成值。生成器可以通过定义一个函数和使用yield关键字来创建。每次调用生成器时,它会从上次离开的地方继续执行,直到遇到yield语句,然后返回一个值。生成器可以节省内存空间,并且可以在循环中进行延迟计算。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [自学Python第五天。Python 大器](https://blog.csdn.net/qq_58619902/article/details/125106679)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Python大器](https://blog.csdn.net/weixin_45816565/article/details/103019421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值