まず、小さなプログラムからインポートし、それぞれのリストを定義し、その中の素数を見つけます。このように書きます
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() 関数はジェネレーターの __next__() メソッドを呼び出す役割を果たします。このとき、ジェネレーターは next を呼び出すメソッドに値を返す役割を果たします。 () を使用し、この値を取得するのに return ステートメントと同等です。
Python での収量とジェネレーター分析に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。