python基础知识13-迭代器与生成器,导入模块
异常处理作业讲解
file = open('/home/pyvip/aaa.txt','w+')
try:
my_dict = {'name':'adb'}
file.write(my_dict['age']) #只能传字符串
except Exception as e:
print(e)
finally:
file.close()
print('文件已经正常关闭了')
运行结果:
'age' #报错信息
文件已经正常关闭了
迭代器与生成器
1.迭代器
迭代就是依次从数据结构中拿出东西的过程.
for 迭代变量 in 可迭代对象
每一次循环都会自动让'迭代变量'指向'下一个元素'.
从可迭代对象生成一个迭代器.
迭代器 = iter(可迭代对象)
下个值 = next(迭代器)
for实现原理
itr = iter(the_list)
try:
while True:
var = next(itr)
print(var)
except StopIteration:
pass
只要对象里面有--iter--()魔法方法,就证明是可迭代对象
li = [1,2,3,4,5]
a = iter(li)
next(a)
输出:1
next(a)
输出:2
自己实现一个可迭代对象:
class Mylist:
def --ter--(self): #iter魔法方法,必须要返回一个迭代器.
return iter([1,2,3,4,5])
li = Mylist() #实例化
for i in li:
print(i) #实现了可迭代.
可迭代对象跟迭代器的区别,迭代器多了一个next方法.
2.生成器
迭代协议
class Cycle:
def --init--(self,elem,n):
self.elem = elem
self.n = n
def --iter--(self):
elem = self.elem
n = self.n
class CycleIter:
def --init--(self):
self.count = 0
def --next--(self):
if self.count < n:
self.count +=1
return elem
else:
raise StopIteration
def --iter--(self):
return self
return CycleIter()
3.生成器与yield
特性一:类似于函数的逻辑
特性二:支持显式的暂停与恢复
特性三:隐式的支持迭代协议.
def cycle(elem,n):
count = 0
while True:
if count < n:
count += 1
yiele elem
else:
break
生成器语法:
yield一个对象:返回这个对象,暂停这个函数,等待下次next重新激活.既支持next,也支持for循环.
def my_gen():定义生成器,由next函数触发执行
print('第一次执行')
yield 1 #返回一个1并暂停函数
print('第二次执行')
yield 2 #返回一个2并暂停函数
print('第三次执行')
#没有代码了,引发StopIterration异常
g = my_gen()
v1 = next(g) #输出:第一次执行
print(v1) #输出:1
v2 = next(g) #输出:第二次执行
print(v2) #输出:2
v3 = next(g) #输出:第三次执行,并抛出一个StopIteration异常.
生成器,是python提供的一种非常简便的语法,能让我们来自己写出迭代器,注意!生成器,是一种特殊的迭代器.
def cycle(elem,n):
count = 0
while True:
if count < n:
count += 1
yield elem
else:
break #一个生成器例子.
my_cycle = cycle('abc',1000) #取值可以用生成器,控制数量,不会卡死.取出来占内存加载一下.
4.模块导入/包
import -> 执行导入的文件 -> 在当前这个文件里生成一个模块对象.
导入语法与导入路径
import ... #直接全部导入
import ... as ... #导入以后,重新命名
from ... import ... #部分导入,模块内部的东西,而不要模块.
sys.path 用于存放导入路径的列表,类似于环境变量中的PATH
import sys
print(sys.path) #显示包路径.不在这个路径下面导入无效.
*代表所有,导入所有方法
相对路径导包: import .bbb.ccc 在python2中可以.
import datetime()
datetime.datetime.now()全部导入使用时代码长
5.包和包管理
模块就是一个py文件.
包,就是包含了很多模块的文件夹.
如何构造一个包,首先需要把py文件放入包文件夹中,并且在包文件夹下加一个--Init--.py文件.可以什么都不写.
加入包的概念后,导入规则是否有变化?通过包,我们加入了层级导入.
查看包的源码:ctrl 点击包名
一个模块就是一个py文件,py文件当中有很多方法.
项目就是很多文件\包集合在一起,还有一些其他的配置文件.
模块中
if --name-- == '--main--': #用来做调试的.
print('正在调试')
print(--name--) 输出--main--
只在我们当前的文件下,自己执行的时候,条件满足,别人调用的时候,--name-- 等于包名字,不是--main--,不会运行.
python基础知识13-迭代器与生成器,导入模块的更多相关文章
- python基础知识7——迭代器,生成器,装饰器
迭代器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器 ...
- python 基础篇 13 迭代器与生成器
13. 前⽅⾼能-迭代器和⽣成器本节主要内容:1. 迭代器2. ⽣成器 ⼀. 迭代器我们之前⼀直在⽤可迭代对象进⾏迭代操作. 那么到底什么是可迭代对象. 本⼩节主要讨论可迭代对象. ⾸先我们先回顾⼀下 ...
- python基础篇_005_迭代器和生成器
Python迭代器和生成器 1.迭代器 迭代:可以将某个数据集内的数据“一个挨着一个的取出来” for i in range(1, 10, 2): # in 后面的对象必须是一个可迭代的 print( ...
- 【笔记】Python基础四:迭代器和生成器
一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...
- python函数知识四 迭代器、生成器
15.迭代器:工具 1.可迭代对象: 官方声明,只要具有__iter__方法的就是可迭代对象 list,dict,str,set,tuple -- 可迭代对象,使用灵活 #方法一: list.__ ...
- Python基础入门(迭代器和生成器)
1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退. 迭代器有两个基本的方法:iter() 和 ...
- python基础9 (迭代器、生成器)
1.可迭代对象 迭代:将某个数据集内的数据“一个挨着一个的取出来” 可迭代协议:可以被迭代要满足的要求,即内部含有__iter__()方法 可迭代的类型:字符串.列表.元组.字典.集合特点:惰性运算 ...
- python基础——9(迭代器、生成器)
一.迭代器 1.概念 器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 s = 'abcdef' ls = [1,2,3,4,5] 遍 ...
- python基础十一之迭代器和生成器
可迭代 内置方法中含有__iter__的数据类型都是可迭代的,只要是可迭代的就可以使用for循环,反之亦然. print(dir('')) # dir()函数可以获取当前数据类型的所有内置方法 返回值 ...
- Python基础——函数的迭代器和生成器
等待更新…………………… 后面再写
随机推荐
- python使用rabbitmq实现简单的消息转发
准备: 1.下载elang语言的支持环境http://www.erlang.org/download.html (rabbitmq使用它开发的) 2.下载rabbitmq软件http://www.ra ...
- UILabel和UIbutton(富文本)封装方法
/** 方法说明:设置label的富文本属性 参数说明:contentStr富文本内容 textColor字体颜色 rangeSet设置字体颜色及大小的位置 */ - (UILabel *)backf ...
- TensorFlow 模型保存/载入
我们在上线使用一个算法模型的时候,首先必须将已经训练好的模型保存下来.tensorflow保存模型的方式与sklearn不太一样,sklearn很直接,一个sklearn.externals.jobl ...
- TopCoder9915(期望dp)
1.还是逆向. 2.状态是还剩红i黑j张时的期望,这样从0,0往R,B推.注意因为是逆着的,所以到了某一步发现期望为负时直接f[i][j]归零,意义是这之后(在递推中算是这之前)的都不摸了,到这就停( ...
- 转 在shell脚本中使用expect实现scp传输问题
1.安装expect expect用于shell脚本中自动交互,其是基于tcl编程语言的工具.所以安装expect首先安装tcl.本文中使用的是expect5.45和tcl8.6.6. 安装tcl [ ...
- requests发送HTTPS请求(处理SSL证书验证)
1.SSL是什么,为什么发送HTTPS请求时需要证书验证? 1.1 SSL:安全套接字层.是为了解决HTTP协议是明文,避免传输的数据被窃取,篡改,劫持等. 1.2 TSL:Transport Lay ...
- SpringMVC中,前台jsp封装参数,绑定参数,传递参数到后台controller的过程详解
前台到后台的流程:前台jsp->后台:controller控制器层->service业务层->DAO数据访问层->数据库model模型层. 从上面流程可知,前台jsp的数据,想 ...
- okhttputils使用(zhuan)
OkHttpUtils 封装了okhttp的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持Https和自签名证书,支持 ...
- xp密钥
Windows XP 专业版 : CCC64-69Q48-Y3KWW-8V9GV-TVKRM
- JS判断两个对象相同属性的属性值是否相等
function isObjectValueEqual(a, b) { var aProps = Object.getOwnPropertyNames(a); var bProps = Object. ...