DAY 6.式、イテレータ、発電機
6.1式
式の6.1.1一覧
list = [index for index in range(10)]
式6.1.2辞書
dict = {
'zhangsan': 10,
'lisi': 12,
'wangwu': 18
}
# 实现键值互换
dict = {k:v for v,k in dict.items() if k >= 12}
6.1.3コレクション式
# 100以内的质数
set = {i for i in range(100) if i % 2 != 0}
ビルダー6.2
式はリスト(または辞書コレクション)を作成しますが、それもワンあなたが無限に長いシーケンスの保存、などすべての自然数として、当然のことながら、我々は一般的に、このシーケンスを使用していないことができない、辞書、リストまたはコレクションであるが、リストまたはコレクションも1回の一連の私たちの一般的な操作と相まって非常にスペース、あるとして記憶されたビットのシーケンスは、保存する必要はありません、そしてちょうど私たちが必要とするデータを提供する方法があります私たちは、ときにのみ、「アルゴリズム」の平均を保持するためのプログラムを必要としませんか?この発電機の用途
発生器は、2つの方法、一方は式の導出と同様であり、ライン上のブラケットにリスト括弧内に誘導される式を有する、オブジェクトが発電を返すであろう作成し、(次を使用することができる)、またはループ反復のために
t = (i for i in range(100) if i % 2 == 0)
for i in t:
print(i)
栗のために、そのそれぞれのフィボナッチ数は、最初の二つの和であります
概して
feibo = [1, 1]
for i in range(2,10000):
feibo.append(feibo[i - 1] + feibo[i - 2])
print(feibo)
私たちはしなければならないし、我々は発電機を使用することができ、このような大規模な配列を保存する必要はありません、それをプリントアウトしています
def feb(f, s, max):
i = 0
while i < max:
f, s = s, f + s
i += 1
yield s
for i in feb(1, 1, 100):
print(i)
外観と機能ビルダー同じですが、実行するたびに得るために、歩留まりリターンとなり、プログラムがブロックされます、それは最後のあなたがビルダーのnext()メソッドを呼び出したときにのみ中断したところから続けます
def Demo():
print(1)
yield 1
print(2)
yield 2
print(3)
yield 3
demo = Demo()
next(demo)
next(demo)
next(demo)
next(demo)
# 1
# 2
# 3
# Traceback (most recent call last):
# File "E:/xxxx/DAY6_1.py", line 45, in <module>
# next(demo)
# StopIteration
発電機は、範囲が呼び出すとStopIterationを発生させます超えると呼び出すとStopIterationがトラバース発電機への例外を捕捉することであるため、我々は一般的に、次を使用していません
for i in Demo():
i
# 等价于
while(True):
try:
next(demo)
except StopIteration:
break
6.3イテレータ
6.3.1反復可能オブジェクト
オブジェクトがループイテラブルのためにと呼ばれるに直接作用することができます:反復処理可能な、二つのカテゴリー、タプル、辞書のリストがあり、およびデータタイプのセットを生成するには、()でisinstanceを使用したオブジェクトは、オブジェクトのIterableであるか否かを判断することができます。
6.3.2イテレータ
次のかもしれ()関数呼び出しと次の目標値への復帰は、継続的に反復子を呼ば:イテレータ。(でisinstanceを使用することができます)オブジェクトがオブジェクトであるか否かを判断するイテレータ
ジェネレータイテレータオブジェクトがありますが、反復処理可能ではなく、イテレータしかし、リスト、辞書、STR。リスト、辞書は、strが反復処理可能イテレータのようになるITER()関数を使用することができます
リスト、辞書、STRや他のデータ型は、イテレータではない、なぜあなたは、求めることができますか?
Pythonはデータ・ストリームを表し、イテレータオブジェクトを返し、データが存在しなくなるまで、次のデータ、スローを呼び出すとStopIterationエラー続けるには、次の()関数呼び出しであることができるイテレータオブジェクトであるためです。このデータ・ストリームは、順序付けられたシーケンスとして見ることができますが、私たちは事前にシーケンスの長さを知ることができない、唯一の計算イテレータは不活性である、とだけ必要になるよう、)(次のデータを達成するために、コンピューティング、オンデマンドの下で機能し続けることができますそれは、次の計算データを返します。
反復子は、さらに、そのようなすべての自然数として、データの無限ストリームを表すことができます。リストは、すべての自然数を使用して格納されることはありません。
6.4概要
- ジェネレーティブ
ジェネレーティブ | 文法 |
---|---|
式のリスト | L = [i for i in range(100) if i % 2 ==0] |
式の辞書 | k:v for k, v in dict.items() if k < 10 |
コレクション式 | S = {i for i in range(100) if i % 2 ==0} |
- ジェネレータ
作成:
式方法と発電機能を
読み込む:
次に()又はため
- イテレータ
反復可能オブジェクト | オブジェクトは、直接的な役割のためにすることができ |
---|---|
イテレータ | 使用次の()を実行イテラブル |
参考記事: