Pythonでのyieldとgeneratorのサンプルコードの詳細な説明

高洛峰
リリース: 2017-03-15 14:01:47
オリジナル
1725 人が閲覧しました

まず、小さなプログラムからインポートし、それぞれリストを定義し、その中の素数を見つけます。次のように書きます

import math
def is_Prims(number):

    if number == 2:
        return True
    //除2以外的所有偶数都不是素数
    elif number % 2 == 0:
        return False
    //如果一个数能被除1和本身之外的数整除,则为合数。其实我们的判定范围到根号n就可以
    for cur in range(2,int(math.sqrt(number))+1,2):
        if number % cur == 0:
            return False
        else:
            return True

def get_Prims(input_list):

    result_list = list()
    for element in input_list:
        if is_Prims(element):
            result_list.append(element)
    return result_list

aa = get_Prims([1,2,3,4,5,6,7,8,9])
print (aa)
ログイン後にコピー

しかし、数値を与えて、それより大きい素数をすべてリストしたい場合はどうなるでしょうか。この番号?次のように書くこともできます:

def get_Prims(number):
    if is_Prims(number):
            return number
ログイン後にコピー

しかし、制御を呼び出し元に渡して戻り 関数 が完全に終了すると、ローカル 変数 と関数の作業は破棄され、次の呼び出しは最初から開始されます。したがって、次の記述方法を使用できます:

def get_Prims(number):
    while(True):
        if is_Prims(number):
            yield number
        number += 1

def get_numbers():
    total = list()
    for next_prim in get_Prims(2):
        if next_prim < 100:
            total.append(next_prim)
        else:
            print(total)
            return

get_numbers()
ログイン後にコピー

ジェネレーター関数について説明します。関数の def コードに yield が含まれており、関数は自動的にジェネレーター関数になります (return が含まれている場合でも)。ジェネレーター関数はジェネレーターを作成します。 (特殊な形式のイテレータの一種で、このイテレータには next() メソッドが組み込まれています)。値が必要な場合、値は直接返されるのではなく、yield を通じて生成されます。したがって、通常の関数とは異なり、制御は渡されません。現時点では。

for ループ は暗黙的に next() 関数を呼び出します。この時点で、ジェネレーターは、呼び出したメソッドに値を返す責任があります。 next()。yield to を使用します。値が返されます。これは return ステートメントと同等です。


以上がPythonでのyieldとgeneratorのサンプルコードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート