Day 13 迭代器 三元表达式 列表生成式 字典生成式 生成器 递归

news/2024/11/14 12:24:02/文章来源:https://www.cnblogs.com/chsun12/p/18545725

目录
  • 0 上节课回顾
    • 0.1 闭包函数
    • 0.2 装饰器
  • 1 迭代器
  • 2 三元表达式和列表推导式
    • 2.1 三元表达式(三目表达式)
    • 2.2 列表推导式
  • 3 字典生成式
  • 4 生成器
    • 4.1 yield关键字
  • 5 递归

0 上节课回顾

0.1 闭包函数

函数内部的变量无法被全局的相同名字的变量修改,局部变量和全局变量不是同一种东西

def f1():x = 1def f2():print(1,x)
x = 10f1()
print(2,x)

0.2 装饰器

user_dict = {'username':None}
def deco(func):def wrapper(*args,**kwargs):if not user_dice.get('username'):username = input('请输入用户名>>>')pwd = input('请输入密码>>>')if username == 'nick' and pwd == '123':print('登陆成功')user_dict['username'] = usernameres = func(*args,**kwargs)return resres = func(*args,**kwargs)return resreturn wrapper@deco
def shopping():print('please shopping!')
def withdraw():print('please withdraw!')
shopping()
withdraw()

1 迭代器

python中一切皆对象 学过的对象:

  • 整形:height = 180 无 __iter__

  • 浮点型:salary = 3.2 无 __iter__

  • 字符串:name = 'nick' 有 name.__iter__()

  • 列表:hobby_list = ['run','read'] 有 hobby_list.__iter__()

  • 元组:hobby_tuple = ('run','read') 有 hobbu_tuple.__iter__()

  • 字典:info_dict = {'name':'nick','weight':140} 有 info_dict.__iter__()

  • 集合:hobby_set = {'read','run','sleep'} 有 hobby_set.__iter__()

  • 函数: 无 __iter__

    def func():pass
    
  • 文件:f = open('text.txt','w',encoding = 'utf8') #w和a都会自动生成文件f.__iter__()

只要有__iter__内置方法的对象就是可迭代对象,。。。

字符串/列表/元组/字典/集合/文件 均为可迭代对象

__next__就是在遍历可迭代对象,当遍历完就会报错

可迭代对象:拥有__iter__方法的对象 可迭代对象不一定是迭代器对象

迭代器对象:拥有__iter__方法,可迭代对象拥有__next__方法才是迭代器对象,迭代器对象一定是可迭代对象,文件本身就是迭代器对象

文件既是可迭代对象,又是迭代器对象

迭代器对象使用__iter__方法后是迭代器对象本身

2 三元表达式和列表推导式

2.1 三元表达式(三目表达式)

dog_name = 'fenggou'
if dog_name == 'fenggou':print('远离它')
else:print('盘它')
# 等价于  (但不推荐使用,不容易看懂)
print('远离它') if dog_name == 'fenggou' else print('盘它')

2.2 列表推导式

list = list()
for i in range(100):list.append(i)
print(list)
# 等价于 记住:傻逼采用的玩意
lis = [i for i in range(100)]
print(lis)lis = [i*2 if i>50 else i for i in range(100)]

3 字典生成式

dic = {i:i**2 for i in range(10)}
for i in dic.items():print(i)res = zip('abcd',[1,2,3,4])
for k,v in res:print(k,v)
# 终极版  字典生成式 + zip拉链函数
res = zip('abcd',[1,2,3,4])
dic = {k:v for k,v in res}
print(dic)  #输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
#区别于fromkeys
dic = dict.fromkeys('abcd',[1,2,3,4])
print(dic)  #输出结果:{'a': [1, 2, 3, 4], 'b': [1, 2, 3, 4], 'c': [1, 2, 3, 4], 'd': [1, 2, 3, 4]}

4 生成器

生成器:自定义的迭代器

4.1 yield关键字

接收值,但不会结束函数,二十继续运行下一行代码,出现yield后不会再返回值,全被接受了,举个例子

def func():print(1)print(2)print(2)
func()   #会输出 1 2 2
#但若变成
def func():print(1)yield 1,2,4print(2)yieldprint(2)
func()  #就不会再输出值了,而是变成了一个迭代器,即直接用__next__来进行迭代,可进行下面操作
g = func()
for i in g:print(i)  #输出1  (1, 2, 4)  2 None 2# 注意 :此时yield后面是可以接收值得,默认为None,也可以接收多个值以元组形式储存

注意:函数本身不是可迭代对象,但在调用之后就成了迭代器

yield:接收值,但不会结束函数,然后继续下一行代码,直到return

return:返回值,直接结束函数,其他特性和yield一摸一样

5 递归

递归:函数调用函数自己 (重复 函数嵌套)

def f1():print('from f1')f1()
f1()
def guess_age(count):count -= 1if count == 1:return 26return guess_age(count) + 2
res = guess_age(5)
print(res) # 32

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833365.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营 | 200.岛屿的数量

岛屿的数量题目链接:https://leetcode.cn/problems/number-of-islands/此题目要点:dfs和bfs都可以解决此题,但是使用dfs代码会更加的简洁首先对grid进行遍历,每一个节点都进行检查,判断是否是1(陆地) 如果是,则进行dfs深搜,并将所有搜到的岛屿节点全置为0,表示此块岛…

5倍提升工作效率,智能合同审查开源系统助力律师行业智能化

一、系统概述 在法律行业,律师和法务人员每天需要处理大量的法律文件和复杂的案件信息。然而,手工分析和关联文档信息既耗时,又容易导致遗漏和错误。为此,我们推出了一款专为法律行业打造的开源免费软件,利用关系抽取算法和深度学习技术,支持自动识别底稿文档中的当事人、…

神经网络架构参考:2-2 卷积篇

densenet 结构层名称 类型 输入大小 (H x W x C) 输出大小 (H x W x C) 核尺寸 步长 参数数量Initial Conv Conv2D 224 x 224 x 3 112 x 112 x 64 7 x 7 2 9,408Max Pooling MaxPool2D 112 x 112 x 64 56 x 56 x 64 3 x 3 2 0Dense Block 1 Composite 56 x 56 x 64 56 x 56 x 2…

数据库字段设置非空, phalcon创建数据验证不通过

在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOT NULL,而phalcon的model在插入或更新之前会自动判断字段是否需要必填,因此导致有空字段时无法存入。 开始遇到这问题时,想到两种解决方法: 一、改数据库字段,把NOT NULL改为可以为空。但该数据库还…

2024年11月中国数据库排行榜:OB连续四月居榜首,腾讯云TDSQL升第九

11月墨天轮排行榜解读新鲜出炉!榜单前五稳中求进,OceanBase连续四月居榜首,第六至十位竞争加剧,此外亦有部分产品焕发活力,一起来看更多排名情况与解读!11月墨天轮社区的中国数据库流行度排行榜已更新,本期共有226个数据库产品参与,相较于年初的292个数据库,产品阵容已…

cmu15545笔记-索引并发控制(Concurrent Indexes)

目录OverviewLock和Latch辨析设计目标大致分类Hash Table LatchesPage LatchesSlot LatchesB+Tree Latches并发问题Latch Crabbing/CoupingOptimistic Coupling(乐观锁)Leaf Node Scan Overview Lock和Latch辨析Lock:抽象的,逻辑的,整体统筹 Latch:具体的,原语性的,自我…

cmu15545笔记:索引并发控制(Concurrent Indexes)

目录OverviewLock和Latch辨析设计目标大致分类Hash Table LatchesPage LatchesSlot LatchesB+Tree Latches并发问题Latch Crabbing/CoupingOptimistic Coupling(乐观锁)Leaf Node Scan Overview Lock和Latch辨析Lock:抽象的,逻辑的,整体统筹 Latch:具体的,原语性的,自我…

cmu15545-索引并发控制(Concurrent Indexes)

目录OverviewLock和Latch辨析设计目标大致分类Hash Table LatchesPage LatchesSlot LatchesB+Tree Latches并发问题Latch Crabbing/CoupingOptimistic Coupling(乐观锁)Leaf Node Scan Overview Lock和Latch辨析Lock:抽象的,逻辑的,整体统筹 Latch:具体的,原语性的,自我…

向量动态量化

本文介绍向量检索服务DashVector动态量化功能和作用。 背景介绍 量化(Quantization)是向量检索技术中一种常用的优化方法,通过一定程度的精度(召回率)损失,来换取性能的大幅度提升,以及内存占用(索引文件大小)大幅度降低。 向量检索服务DashVector支持向量的动态量化,…

从零到一构建并打包 React + TypeScript + Less组件库教程(一、项目初始化搭建+代码规范集成)

本系列涉及的内容如下:组件库基础搭建,react + ts + less 项目规范,包括但不限于 prettier、eslint、stylelint、husky、lint-staged、commitlint pnpm monorepo + turborepo 集成 gulp + webpack 构建 esm、cjs 和 umd storybook 文档集成此系列不包含发布 npm 和构建 CI 流…

分区Partition

理解Partition 向量检索服务DashVector的Collection具有分区(Partition)的能力,同一个Collection下的Doc可通过不同的Partition进行物理和逻辑上的分区。各种Doc操作(如插入Doc、检索Doc等。若指定Partition,则该操作将限定在该指定的Paritition内进行。通过合理的Partiti…

PGsql 大写字段名,flink目前不支持读取

flink1.20 连接 postgres_flink postgresql-CSDN博客[FLINK-23324] Postgres of JDBC Connector enable case-sensitive. - ASF JIRA