5.Python関数

4708 ワード

関数#カンスウ#
関数は、特定の機能を持つ再利用可能な文グループです.
  • 関数の使用には主に2つの目的がある:プログラミングの難易度を低減し、コードの再利用
  • 関数の定義
  • Python defリザーブワードを使用して関数を定義し、関数識別子名とカッコ()
  • を接続します.
  • 関数識別子名は、任意の有効なPython識別子
  • であることができる.
  • パラメータは括弧で定義され、パラメータリストは関数を呼び出すときに渡される値であり、0個(括弧を保持)、1つ以上(カンマで区切る)
  • である.
  • の関数体は、コロンで始まる、
  • にインデントされる.
  • 関数体は、関数が呼び出されるたびに実行されるコード
  • である.
  • returnはワード終端関数を保持し、呼び出し者に選択的に値を返し、式を持たないreturnはNone
  • を返すことに相当する.
  • 関数はreturn文を持たず、関数体の終了時に呼び出し者
  • に制御権を返すことができる.
    def():
        
        return
    

    関数呼び出し
  • 関数呼び出しおよび実行の一般的な形式
  • ()
    
  • 関数の呼び出しプロセス
  • 呼び出しプログラムは、呼び出しにおいて
  • の実行を一時停止する.
  • は、呼び出し時に実パラメータを形パラメータ
  • にコピーする.
  • 実行関数体文
  • 関数呼び出しが終了すると戻り値が与えられ、プログラムは呼び出し前の一時停止に戻って
  • を実行し続ける.
    関数パラメータ
  • pythonでは、タイプはオブジェクトに属し、変数にはタイプがなく、1つのオブジェクトの参照
  • のみである.
  • numbers,strings,tuplesは可変(immutable)オブジェクト
  • である.
  • は可変オブジェクトを伝達するオブジェクトの値を伝達し、別の複製オブジェクトを修正するだけで、オブジェクト自体に影響を与えない
  • である.
  • list,dictは可変オブジェクト
  • である.
  • は可変オブジェクトがそのオブジェクトに影響を与えることを伝え、可変オブジェクトは関数の中でパラメータを修正し、この関数を呼び出す関数の中で、元のパラメータも
  • 変更された.
    必須パラメータ(位置パラメータ)
  • 位置パラメータは正しい順序で関数に入力する必要があり、呼び出し時の数は宣言時と一致しなければならない
  • 既定のパラメータ
  • 関数を定義するときにパラメータにデフォルト値を指定し、関数を呼び出すときに対応するパラメータ値が入力されない場合、デフォルトパラメータ
  • が使用されます.
  • デフォルトパラメータは、不変オブジェクト
  • を指す必要があります.
  • デフォルトパラメータは、非デフォルトパラメータの後
  • に定義する必要があります.
    def r(str,times=2):
        print(str*times)
        
    r("T")
    TT
    r("T",4)
    TTTT
    

    疑問:関数に複数のパラメータがある場合、変化の大きいパラメータを前に、変化の小さいパラメータを後ろに、変化の小さいパラメータをデフォルトのパラメータとすることができますか?
    かへんパラメータ
  • 関数定義時に可変パラメータを設計することができ、パラメータの前にアスタリスク(*)を追加することによって
  • を実現する.
  • 可変パラメータはメタグループ(tuple)としてインポートされ、名前のないすべての変数パラメータ
  • が格納される.
  • 可変パラメータは、パラメータリストの最後の
  • にのみ表示されます.
    def vfunc(a,*b)
        print(type(b)
        for n in b:
            a+=n
        return a
    vfunc(1,2,3,4,5)
    
    15 #1+2=3;3+3=6;6+4=10;10+5=15
    

    キーワードパラメータ
  • キーワードパラメータは、関数が0または複数のパラメータ名を含むパラメータを入力することを可能にし、関数内部で辞書
  • として組み立てる.
  • キーワードパラメータを使用する関数呼び出し時のパラメータの順序が宣言時と一致しないことを許可し、Python解釈器はパラメータ名でパラメータ値
  • を一致させることができる.
    キーワードパラメータの命名
  • キーワードパラメータの名前を制限するには、名前付きキーワードパラメータ
  • を使用します.
  • 名前付きキーワードパラメータは、パラメータ名
  • に入力する必要があります.
  • 名前付きキーワードパラメータには特殊な区切り記号が必要であり、後のパラメータは名前付きキーワードパラメータ
  • と見なされる.
  • 関数定義に可変パラメータが既に存在する場合、後に続く名前付きキーワードパラメータには特別な区切り文字*が必要なくなります.
  • パラメータの組み合わせ
  • 必須パラメータ、デフォルトパラメータ、可変パラメータ、キーワードパラメータおよびネーミングキーワードパラメータは、
  • を組み合わせて使用することができる.
  • パラメータを組み合わせて使用できる定義順序は、必須パラメータ、デフォルトパラメータ、可変パラメータ、名前付きキーワードパラメータ、およびキーワードパラメータ
  • である必要があります.
    匿名関数
  • 匿名関数lambda関数匿名関数とも呼ばれ、関数名を関数結果として
  • に返す
    =lambda:
    
  • lambda関数は通常の関数と同様に、
  • 式に等しい.
    def():
        return
    
  • lambda関数は、単純で1行で表すことができる関数を定義するために使用され、1つの関数タイプ
  • を返す.
    f=lambda q,w,e,r:q+w+e+r
    f(1,2,3,4)
    10
    
  • lambda関数関数関数関数オブジェクトを必要とするシーン
  • 関数の戻り値
  • return文は、関数を終了するために使用され、プログラムを関数が呼び出された場所に戻して
  • を実行し続ける.
  • return文は、0個、1個または複数の関数を同時に演算する結果を、関数が呼び出された位置
  • に返すことができる.
  • 関数はreturnがない場合があり、このとき関数は
  • 値を返さない.
  • 関数はreturnで複数の値を返すこともでき、複数の値はメタグループタイプで
  • 保存される.
    def func(a,b):
        return b,a
    s=func("t",2)
    print(s,type(s))
    (2, 't') 
    

    変数スコープ
  • Pythonの役割ドメインは全部で4種類:
  • L(Local)局所作用域
  • E(Enclosing)閉包関数外の関数のうち
  • G(Global)グローバル役割ドメイン
  • B(Built-in)内蔵ドメイン
  • の4つの役割ドメインは、L->E->G->Bのルールで
  • を検索します.
  • Pythonにはモジュール(module)、クラス(class)、および関数(def、lambda)のみが新しい役割ドメイン
  • を導入する.
  • は、関数内部の変数が局所的な役割ドメインを有することを定義し、関数外のグローバルな役割ドメインを有することを定義する
  • である.
    グローバル変数
  • グローバル変数は、プログラム全体にわたって
  • にアクセスすることができる.
    ローカル変数
  • ローカル変数は、宣言された関数の内部でのみ
  • にアクセスできます.
    関数の再帰
    関数定義で関数自体を呼び出す方法を再帰と呼ぶ.
  • 数学経典再帰例——階乗
  •  n!=n(n-1)(n-2)...(1)
    
    n!=1 (n=0)
    n!=n(n-1)! (otherwise)
    
  • 再帰の2つの重要な特徴
  • には1つ以上の基本例が存在し、基本例は再帰を必要とせず、決定式
  • である.
  • すべての再帰鎖は、1つ以上のベース例で終わる
  • である.
  • 再帰的使用方法
  • def fact(n):
        if n==0:
            return 1
        else:
            return n*fact(n-1)
    num=eval(input('       :'))
    print(fact(abs(int(num))))
    
  • 再帰を使用するには、必ずベース例の構築に注意しなければならない.そうしないと、再帰は
  • に戻ることができない.
    コード多重化とモジュール化設計
  • 現代プログラミング言語はコードの面から関数と対象の2つの抽象方式を採用し、それぞれプロセス向けと対象向けの2つのプログラミング思想
  • に対応している.
  • 関数はプログラムの基本的な抽象的な方法であり、一連のコードを整理して他のプログラムに名前を付けて使用し、他のコードはパラメータを入力するだけで関数を呼び出すことができ、関数機能を更新すると、呼び出されたすべての機能が更新される.
  • オブジェクトは、プログラムコードをより高度なクラスに組織するプログラムの高度な抽象的な方法です.オブジェクトには、オブジェクトの特徴を特徴付けるプロパティと、オブジェクトの操作を表す方法が含まれます.
  • モジュール化設計値は、関数またはオブジェクトのパッケージ機能によってプログラムをメインプログラム、サブプログラム、サブプログラム間の関係の表現に分割する.
  • モジュール化設計の2つの基本的な要求:
  • 締結:機能ブロックをできるだけ合理的に区分し、機能ブロック内部の締結は
  • である.
  • 松結合:モジュール間関係はできるだけ簡単で、機能ブロック間の結合度は
  • 低い.