基本13 - pythonのイテレータとジェネレータ、インポートモジュール

例外処理の動作を説明しました

ファイル=オープン( '/ホーム/ pyvip / aaa.txt'、 'W +')

試してみてください。

my_dict = { '名前': 'ADB'}

file.write(my_dict [ '年齢']) 文字列を渡すことができます

Eなどの例外を除いて:

印刷(E)

最後に:

file.close()

印刷(「文書が正常にオフになっています」)

結果:

「年齢」#エラーメッセージ

ドキュメントが適切に閉じられています

イテレータとジェネレータ

1.イテレータ

反復は、データ構造から何かを思い付く続くプロセスです。

反復可能で繰り返し変数のために

各サイクルは、自動的に「次の要素に」「反復変数」ポイントをできるようになります。

反復可能オブジェクトからイテレータを生成します。

反復子= ITER(イテレート可能オブジェクト)

次の値=次(イテレータ)

実装の原則について

ITR = ITER(the_list)

試してみてください。

真の中に:

VAR =次の(ITR)

印刷(でした)

呼び出すとStopIterationを除きます:

パス

限り--iterオブジェクトがあるとして - ()マジックメソッドは、それが反復可能オブジェクトであることが判明しました

= [1,2,3,4,5]

パス(ii)は=

次の(A)

出力:1

次の(A)

出力:2

反復可能なの独自の実現:

クラスマイリスト:

デフ--ter - (自己):魔法のメソッド#iterイテレータを返す必要があります。

復路([1,2,3,4,5])

マイリスト=李() インスタンス化

リチウムのIのための:

印刷(I)の繰り返し#を達成することができます。

区別イテレータ、イテレータ1つの以上の次の方法でイテレート可能オブジェクト。

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

 

おすすめ

転載: www.cnblogs.com/winfun/p/10983874.html