file = open('/home/pyvip/aaa.txt','w+')
try:
my_dict = {'name':'adb'}
a file.write (my_dict [ 'Age']) # string can pass
print (e)
finally:
file.close()
print ( 'document has been normally turned off')
operation result:
'Age' # error message
Documents have been properly closed
Iterators and generators
1. iterator
Iteration is the process followed to come up with something from the data structure.
for the iteration variable in iterable
Each cycle will automatically let 'iteration variable' point 'to the next element'.
Generates an iterator from iterables.
Iterator = iter (iterables)
The next value = next (iterator)
for implementation principle
itr = iter(the_list)
try:
while True:
var = next(itr)
print (were)
except StopIteration:
pass
As long as there are objects --iter - () magic method, it proved to be iterables
= [1,2,3,4,5]
path = a (ii)
next(a)
Output: 1
next(a)
Output: 2
Own realization of a iterable:
class Mylist:
def --ter - (self): #iter magic method must return an iterator.
return trip ([1,2,3,4,5])
Mylist = Li () # instantiated
for i in li:
Print (i) # of iterations can be achieved.
Iterables with distinction iterator, the iterator one more next method.
2. Generator
Iteration agreement
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--,不会运行.