Python再帰関数(フィボナッチ数列)、コルーチン、関数設計仕様

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文でコルーチンとは何かを説明します。コルーチンはユーザーモードの軽量スレッドです。つまり、コルーチンはユーザープログラム自体によって制御およびスケジュールされます。

強調する必要があるのは:

  1. Pythonスレッドはカーネルレベルに属します。つまり、スケジューリングはオペレーティングシステムによって制御されます(たとえば、1つのスレッドがioに遭遇したり、実行時間が長すぎると、他のスレッドを実行するように切り替えたりすると、cpu実行権限を放棄するよう強制されます)。

  2. コルーチンをシングルスレッドで開き、IOに遭遇すると、アプリケーションレベル(オペレーティングシステムではない)から切り替えを制御して効率を向上させます(!!!!!!非IO操作の切り替えは効率とは関係ありません)。

スレッドの切り替えを制御するオペレーティングシステムと比較して、ユーザーは単一スレッドでコルーチンの切り替えを制御します。

利点:

1. 协程的切换开销更小,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级
2. 单线程内就可以实现并发的效果,最大限度地利用cpu

短所:

1. 协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程
2. 协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程

コルーチンの特性を要約します。

  1. 1つの単一スレッドでのみ並行である必要があります
  2. 共有データを変更するためにロックは必要ありません
  3. 制御フローの複数のコンテキストをユーザープログラムに保存する
  4. 追加:コルーチンは、IO操作が発生すると自動的に他のコルーチンに切り替わります(IOの検出を達成する方法、歩留まり、グリーンレットを達成できない場合、geventモジュール(選択メカニズム)が使用されます)

 

3、機能設計仕様:

  カップリング:

    (1)関数の独立性を確保するために、パラメーターを介して入力を受け入れ、戻りを介して出力を生成すること。

    (2)関数間で通信するためにグローバル変数を減らすようにしてください。

    (3)関数の変数型パラメーターを直接変更しないでください。

    (4)別のモジュールで定義された変数を直接変更しないでください。

  重合:

    (1)各機能には、単一の統一された目標が必要です。

    (2)各機能の機能は比較的単純でなければならない。

 

おすすめ

転載: www.cnblogs.com/xh0203/p/12682093.html