python 三大器

news/2024/12/22 20:48:33/

python 三大器

  • 迭代器: 有__iter__()和__next__()方法
  • 生成器:函数中将return换成yield
  • 装饰器:闭包的本质

迭代器

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 迭代器 拥有__iter__()和__next__()方法
# 先将可迭代对象赋值一个新的变量转成迭代器
# 每次都返回一个值
# 一个__next__()对应一个输出结果
s = "1234"
new_s = s.__iter__()
print(new_s.__next__())# 输出1
print(new_s.__next__())# 输出2# 变量名 = 可迭代对象
# 新赋值的变量名 = 变量名.__iter__() # 装成迭代器
# print(新赋值的变量名.__next__())

生成器

# 生成器 函数中将return改成yield的函数
def func():print(1)yield 2
g = func()
print(next(g))# def 函数名():
#     print(输出)
#     yield 返回值
# 新的函数名 = 调用函数名()
# print(next(新的函数名))# yield from 将可迭代对象逐行输出 节省空间

装饰器

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 闭包
def func():a = 11def foo():print(a)return foo
ret = func()
print(ret.__closure__)# 返回内存地址def func():a = 11def foo():print(a)return foo
func()()
print(func.__closure__)# 返回None# 递归 不断自己调用自己,有明确终止条件
def age(n):if n == 4:return 18else:return age(n+1)-2
print(age(1))# 输出12# 将age"1"的实参传给age"n"形参
# if 1!=4,执行else
# else return age(1+1)=2
# 直到4==4,return18
# 18反给age(3),18-2=16
# 一直反age(2),16-2=14  age(1),14-12=12
# age(1)=12# 装饰器 在不改变源代码和调用方法的基础上增加新功能
# 将闭包的参数换成函数名
def func(f):def foo(*args,**kwargs):print("装饰器")return f()return foo
@func
# @函数名 语法糖 相当于 f=func(f)
def index():print(123)return 456
print(index())
# 输出 装饰器 123 456# def 外层函数(参数):
#     def 内层函数(动态参数,形参):
#         print()
#         return 参数()
#     return 内层函数
# @外层函数
# def 源函数():
#     print()
#     return
# print(源函数())

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

相关文章

JAVA三大器介绍

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

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

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

Java官方笔记9Lambda表达式

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

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

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

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

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

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;于是一种强烈的想法涌上心头——还是先回瘟到死玩一会儿游戏再说吧~ 在…

Fedora日常使用设置

在这里记录一下我在平时使用Fedora时喜欢的一些设置&#xff0c;仅仅是个人喜好啦。 一、zsh 首先要说的就是zsh&#xff0c;第一次使用后就被她性感的腰身所深深吸引了。所以在任何使用shell的系统上&#xff0c;我都会优先安装使用zsh。 1.安装 据说zsh配置比较麻烦&#…