Basics 13- python iterators and generator, import module

Exception handling operations explained

file = open('/home/pyvip/aaa.txt','w+')

try:

my_dict = {'name':'adb'}

a file.write (my_dict [ 'Age']) # string can pass

except Exception as e:

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--,不会运行.

 

Guess you like

Origin www.cnblogs.com/winfun/p/10983874.html