python三大器

news/2024/12/22 20:36:21/

迭代器
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# 标志1def __iter__(self):return self# 标志2,获取迭代器中下一个值def __next__(self):if self.current_index < len(self.my_list):value = self.my_list[self.current_index]# 取值完成以后需要对下标加上1self.current_index += 1return valueelse:# 超出范围抛出停止迭代的异常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 = 0b = 1# 记录生成数列的下标current_index = 0# 循环判断条件是否成立while current_index < num:# 记录当前斐波那契数值result = a#生成下一个斐波那契数值,即b,但下一次输出aa, b = b, a + bcurrent_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

http://www.ppmy.cn/news/450674.html

相关文章

python 三大器

python 三大器 迭代器: 有__iter__()和__next__()方法生成器&#xff1a;函数中将return换成yield装饰器&#xff1a;闭包的本质 迭代器 遇到问题没人解答&#xff1f;小编创建了一个Python学习交流QQ群&#xff1a;579817333 寻找有志同道合的小伙伴&#xff0c;互帮互助,群…

JAVA三大器介绍

1.过滤器&#xff08;Filter&#xff09;&#xff1a;所谓过滤器顾名思义是用来过滤的&#xff0c;Java的过滤器能够为我们提供系统级别的过滤&#xff0c;也就是说&#xff0c;能过滤所有的web请求&#xff0c; 这一点&#xff0c;是拦截器无法做到的。在Java Web中&#xff0…

【离散数学】gpt教我离散数学3

对于给定的A、B和f&#xff0c;判断f是否为从A到B的函数&#xff1a;f&#xff1a;A→B.如果是&#xff0c;说明f是否为单射、满射、双射的. ABR, f(x)根号x 对于给定的集合 A B R AB\mathbb{R} ABR 和函数 f : A → B f:A\rightarrow B f:A→B&#xff0c; f ( x ) x f(…

Java官方笔记9Lambda表达式

Lambda Expression 有了Lambda Expression&#xff0c;就不用再写anonymous classes。 写Lambda&#xff0c;首先要找到它的类型。 There is a restriction on the type of a lambda expression: it has to be a functional interface. 函数接口&#xff0c;只有1个抽象方法的接…

系统架构设计师笔记第18期:NoSQL数据库

NoSQL 数据库通常指非关系型数据库&#xff0c;是一种基于数据键值对存储、高度分布式、支持动态查询的数据管理系统。NoSQL 数据库的设计目的是为了解决传统关系型数据库无法处理的大型应用程序的数据存储和管理问题。它们通常具有以下特点&#xff1a; 灵活性&#xff1a;No…

线性搜索算法-数据结构和算法教程

线性搜索被定义为一种顺序搜索算法&#xff0c;它从一端开始&#xff0c;遍历列表的每个元素&#xff0c;直到找到所需的元素&#xff0c;否则搜索继续到数据集的末尾。 线性搜索算法是如何工作的&#xff1f; 在线性搜索算法中&#xff0c; 每个元素都被认为是键的潜在匹配…

React学习笔记(一)DOM、元素

一、一个最简单的react 页面&#xff1a; ReactDOM.render(<h1>Hello, world!</h1>,document.getElementById(root) ); 它将在页面上展示一个 “Hello, world!” 的标题。 react简单的一个Hello, world看着貌似很复杂&#xff0c;后面将会逐步 二、何为DOM元素?…

学习linux能有什么用

<wbr>很多朋友装了 Linux&#xff0c;看着全新的菜单样式、陌生的程序&#xff0c;一下子脑袋就空了&#xff08;特别是系统未安装中文语言支持时&#xff09;&#xff0c;不知该干点什么&#xff0c;于是一种强烈的想法涌上心头——还是先回瘟到死玩一会儿游戏再说吧~ 在…