Pythonの式、イテレータ、発電機

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}
  • ジェネレータ

作成:
式方法と発電機能を
読み込む:
次に()又はため

  • イテレータ
反復可能オブジェクト オブジェクトは、直接的な役割のためにすることができ
イテレータ 使用次の()を実行イテラブル

参考記事:

GitHubのPythonの顔の質問

遼雪峰の公式サイト

Pythonのジェネレータとイテレータはこれで十分です持っています

公開された62元の記事 ウォン称賛33 ビュー10000 +

おすすめ

転載: blog.csdn.net/zjbyough/article/details/96200701