python中raise stoplteration_推导表达式迭代器生成器模块和包 | 编程电脑技术交流...
魔法方法需要特定的条件去触发
有next是迭代器
# li = []
# for i in range(1,10):
# li.append(i)
# print(li)
# --------------------------------------
# li = [i for i in range(1,10)] #必须掌握
# print(li)
# -----------------------------------------
#列表推导 + 条件判断 (必须掌握)
# li2 = [i*10 for i in range(1,10) if i%2 ==0]
# print(li2)
# --------------------------------------------
#列表推导+三目运算符 (必须掌握)
# li3 = [i*100 if i%3 ==0 else i*10 for i in range(1,10) ]
# print(li3)
# --------------------------------------------
#集合推导
# se = {i for i in range(1,10)}
# print(se)
# ---------------------------------------
#字典推导
a = [1,2,3,4,5,6,7]
# b = enumerate(a)#这个函数是什么意思
# di = {i:j for i,j in enumerate(a)}
# print(di)
迭代:
每一次循环都会自动让“迭代变量”指向“下一个元素”
the_list = [5,4,3,2,1,]
for index in the_list:
print(index)
var = None
index = 0
while index < len(the_list):
var = the_list[index]
print(var)
index +=1
迭代器:
生成迭代器的方法:
1, iterator = iter(li)
2, iterator = li.__iter__()
02, 迭代器对象本身需要支持以下两种方法,他们一起构成迭代器协议:
iterator.__iter__() (使用dir查看只有这个的是可迭代对象)
iterator.__next__() (使用dir查看有这个的是迭代器)
取值:
next(iterator)
iterator.__next__()
注意: 如果迭代器取值完之后,会返回Stoplteration错误
从可迭代对象生成一个迭代器:
迭代器 = iter(可迭代对象)
下个值 = next(迭代器)
for实现原理:
li4 = [1,2,3,4,5,6,7,8,9,10]
it = iter(li4)#首先将一个对象变成可迭代类型
while True:
try:
var = next(it) #一个一个取值
print(var)
except StopIteration: #直到没有值,就跳出循环
break
自定义迭代器(掌握原理):
class Testlter:
def __init__(self,li):
self.li = li
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.li):
index = self.li[self.index]
self.index += 1
return index
else:
raise StopIteration
简单原理记忆:
首先定义init来传入参数
然后必须用iter来生成迭代器
然后要有next来返回当前运行到哪个index了
next里超出len以后就抛出异常
生成器:
方法一:列表推导式的[]改成()
b = (x for x in range(10))
print(next(b))
print(next(b))
print(next(b))
方法二:在函数里面加上yield
def func(num):
a = 0
while a
yield a
a +=1
ge = func(10)
print(next(ge))
print(next(ge))
print(next(ge))
print(next(ge))
生成器不会一下子把所有内容生成出来,在我们需要的时候用next()去生成,可以节省内存空间
yield运行规则
注意:
yield表达式只能在函数中使用
yield表达式可以使函数成为一个生成器
yield可以返回表达式结果,并且暂停函数执行,直到next激活下一个yield
简单理解生成器就是一个迭代器
python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果,从而节省了大量空间,这
也是生成器的主要好处。
模块:
在python中,模块就是一个py文件,可以使用下面两种方法导入
import datetime
from datetime import datetime (as dm)
在同一目录下,可直接使用上面两种方法导入
在不同目录下,需要使用sys.path添加路径
sys.path.append('path')
在python3中导入后,在当前路径下会生成一个__pycache__文件夹
斐波那契:
def feibonaqi(i,n):
i1 = 0
i2 = i
count = 0
while True:
if count < n:
count +=1
b = i1+i2
i1 = i2
i2 = b
yield b
else:
break
import feibo
aa = feibo.feibonaqi(1,20)
print(next(aa))
print(next(aa))
print(next(aa))
print(next(aa))
print(next(aa))
print(next(aa))
# li = []
# for i in range(1,10):
# li.append(i)
# print(li)
# --------------------------------------
# li = [i for i in range(1,10)] #必须掌握
# print(li)
# -----------------------------------------
#列表推导 + 条件判断 (必须掌握)
# li2 = [i*10 for i in range(1,10) if i%2 ==0]
# print(li2)
# --------------------------------------------
#列表推导+三目运算符 (必须掌握)
# li3 = [i*100 if i%3 ==0 else i*10 for i in range(1,10) ]
# print(li3)
# --------------------------------------------
#集合推导
# se = {i for i in range(1,10)}
# print(se)
# ---------------------------------------
#字典推导
a = [1,2,3,4,5,6,7]
# b = enumerate(a)#这个函数是什么意思
# di = {i:j for i,j in enumerate(a)}
# print(di)
# -------------------------------------
# the_list = [5,4,3,2,1,]
# for index in the_list:
# print(index)
#
# var = None
# index = 0
# while index < len(the_list):
# var = the_list[index]
# print(var)
# index +=1
#for 实现原理:
# li4 = [1,2,3,4,5,6,7,8,9,10]
# it = iter(li4)#首先将一个对象变成可迭代类型
# while True:
# try:
# var = next(it)#
# print(var)
# except StopIteration:
# break
# 自定义迭代器:
# class Testlter:
# def __init__(self,li):
# self.li = li
# self.index = 0
# def __iter__(self):
# return self
# def __next__(self):
# if self.index < len(self.li):
# index = self.li[self.index]
# self.index += 1
# return index
# else:
# raise StopIteration
#生成器 1, 列表推导式的[]改成 ()
# b = (x for x in range(10))
# print(next(b))
# print(next(b))
# print(next(b))
# 2,在函数里加上yield
# def func(num):
# a = 0
# while a
# yield a
# a +=1
# ge = func(10)
# print(next(ge))
# print(next(ge))
# print(next(ge))
# print(next(ge))
import feibo
aa = feibo.feibonaqi(1,20)
print(next(aa))
print(next(aa))
print(next(aa))
print(next(aa))
print(next(aa))
print(next(aa))
python中raise stoplteration_推导表达式迭代器生成器模块和包 | 编程电脑技术交流...相关推荐
- Python 中的黑暗角落(三):模块与包
如果你用过 Python,那么你一定用过 import 关键字加载过各式各样的模块.但你是否熟悉 Python 中的模块与包的概念呢?或者,以下几个问题,你是否有明确的答案? 什么是模块?什么又是包? ...
- python中raise和raise e区别_python raise和assert的区别
python中raise和assert的区别 一.使用raise抛出异常 python可以自动触发异常,raise(内置函数)的定义为显示的抛出异常,用户可以使用raise进行判断,显式的引发异常,r ...
- Python 中的列表推导式
Python 中的列表推导式 简单用法 添加多个条件 多个列表使用 替换 Reduce 和 Lambda 嵌套列表推导式 列表推导式是一种 Python 构造,可减少生成新列表或过滤现有列表所需的代码 ...
- Python中eval函数的表达式如何使用
这篇文章主要介绍了Python中eval函数的表达式用法示例,文中通过示例对比来为大家进行详细的讲解,有需要的朋友可以借鉴参下,希望有所帮助 eval 是干嘛的? 解析字符串表达式并执行,并返回一个值 ...
- Python 中 raise 和 raise/from 的区别
Python 中 raise 和 raise/from 的使用方法 文章目录 Python 中 raise 和 raise/from 的使用方法 0. 参考资料 1. 代码比较 2. 用法解释 2.1 ...
- 在python中调用js或者nodejs要使用PyExecJs第三方包。
在python中调用js或者nodejs要使用PyExecJs第三方包. 使用时:import execjs 这是没有用到nodejs的情况:如果用到nodejs,这种写法会报"Cannot ...
- Python中的装饰器、迭代器、生成器、推导式、匿名函数和高阶函数
文章目录 装饰器 迭代器 生成器 推导式 匿名函数 高阶函数 装饰器 闭包 介绍装饰器前先了解一下闭包,在Python中,一切皆对象(Object),函数(Function)也不例外,也是一个普通的对 ...
- 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】...
Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...
- python中raise stoplteration_Python迭代器
本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢. 声明: 本博客欢迎转发,但请保留原作者信息! 新浪微博:@iuskye; Github:@iuskye ...
最新文章
- webservice 接口练习
- redis源码剖析(六)—— Redis 数据库、键过期的实现
- 链表应用 多项式相加
- 前后落差大用什么词语_语文考题一共有五类:汉字类、词语类、句子类、阅读类、作文类,如果基础扎实,答题技巧弄懂了,哪一类都能拿高分!...
- 整型与布尔型的转换(信息学奥赛一本通-T1022)
- Opencv--IplImage访问图像像素的值
- OpenShift 4 - 下载OpenShift项目中的ImageStream
- 训练作用_感觉统合是什么意思,感觉统合训练有什么作用
- 养老院管理系统如何开发详解
- jQuery or YUI3 ?
- Windows 写入缓存
- Apollo选型及优势介绍
- 2022-2027年中国股权众筹行业市场调研及未来发展趋势预测报告
- 法国数学到底有多厉害?
- nats断链情况总结
- vscode下载太慢,快速下载vscode方法!
- matlab diff函数
- C语言strlen等系列函数详细总结
- matlab多径信道模型,多径时变信道模型的仿真与性能分析课程设计(样例3)
- android移动支付——银联支付
热门文章
- 让自己的程序支持livewriter
- ios unrecognized selector sent to instance出现的原因和解决方案
- python下使用qrcode方法
- asp 把大图缩小显示的JS
- 每天学一点flash (20) flash cs3.0 外部加载图片
- java遍历查询的某一列_【jQuery:遍历相同class的所有值,遍历某一列td的值】
- 世界人口钟实时数据_用数字孪生重新定义智慧城市,美象VR推出MxDATA智慧城市CIM数据可视化平台...
- python信号与槽_Python信号和插槽(1),python,与,一
- C语言playsoundw函数,使用inline hook实现修改PC微信通知铃声-哥哥微信来了
- 公共端接正极还是负极_【动力电池大事记】现代摩比斯启动首批模组工厂,松下拟挪威建厂,200名车主起诉现代,密歇根大学开发锂金属固态电池及“无负极”工艺...