1つの再帰:
実行中、自分自身を呼び出し、終了条件を満たさなくなるまで、レイヤーごとに自分自身を呼び出します
[2つの鏡を反対側に置いて、鏡で自分を見ると、鏡にはオブジェクトの層がたくさんあることがわかります]
再帰には境界条件が必要であり、無限にループすることはできません。再帰的なフォワードセグメントと再帰的なリターンセグメントです。
例:10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
それは次のように理解できます:10 *(10-1)*((10-1)-1)[各呼び出しは1ずつ減ります]
関数にそれ自体への呼び出しが含まれています
def fact(n): if n <= 1 : return 1 else : return n * fact(n- 1 )#fact(n)はそれ自体を表す test = fact(3 )#ここはfact(3)= 3 * factと同等(2)= 3 * 2 *ファクト(1)= 3 * 2 * 1 印刷(テスト)
フィボナッチ数列:再帰関数も使用できます
1、1、2、3、5、8、13、21、34、...、n = 1およびn = 2すべて出力1
def fact(n): if n <= 2 : return 1 else : return fact(n- 1)+ fact(n- 2 ) test = fact(34 ) print(test)
セカンドコルーチンの紹介
コルーチン:単一スレッドの下での並行性。マイクロスレッドとも呼ばれるファイバー。英語名コルーチン。1文でコルーチンとは何かを説明します。コルーチンはユーザーモードの軽量スレッドです。つまり、コルーチンはユーザープログラム自体によって制御およびスケジュールされます。
強調する必要があるのは:
-
Pythonスレッドはカーネルレベルに属します。つまり、スケジューリングはオペレーティングシステムによって制御されます(たとえば、1つのスレッドがioに遭遇したり、実行時間が長すぎると、他のスレッドを実行するように切り替えたりすると、cpu実行権限を放棄するよう強制されます)。
-
コルーチンをシングルスレッドで開き、IOに遭遇すると、アプリケーションレベル(オペレーティングシステムではない)から切り替えを制御して効率を向上させます(!!!!!!非IO操作の切り替えは効率とは関係ありません)。
スレッドの切り替えを制御するオペレーティングシステムと比較して、ユーザーは単一スレッドでコルーチンの切り替えを制御します。
利点:
1. 协程的切换开销更小,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级
2. 单线程内就可以实现并发的效果,最大限度地利用cpu
短所:
1. 协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程
2. 协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程
コルーチンの特性を要約します。
- 1つの単一スレッドでのみ並行である必要があります
- 共有データを変更するためにロックは必要ありません
- 制御フローの複数のコンテキストをユーザープログラムに保存する
- 追加:コルーチンは、IO操作が発生すると自動的に他のコルーチンに切り替わります(IOの検出を達成する方法、歩留まり、グリーンレットを達成できない場合、geventモジュール(選択メカニズム)が使用されます)
3、機能設計仕様:
カップリング:
(1)関数の独立性を確保するために、パラメーターを介して入力を受け入れ、戻りを介して出力を生成すること。
(2)関数間で通信するためにグローバル変数を減らすようにしてください。
(3)関数の変数型パラメーターを直接変更しないでください。
(4)別のモジュールで定義された変数を直接変更しないでください。
重合:
(1)各機能には、単一の統一された目標が必要です。
(2)各機能の機能は比較的単純でなければならない。