Python学習(13)関数

18594 ワード

目次
  • Python関数
  • 関数呼び出し
  • 匿名関数
  • return文
  • 変数作用域
  •  
    Python関数
    関数は、単一の、または関連する機能を実現するためのコードセグメントを再利用するために組織されています.
    関数は、アプリケーションのモジュール性とコードの再利用率を向上させることができます.Pythonはprint()のような多くの組み込み関数を提供していることを知っています.しかし、ユーザー定義関数と呼ばれる関数を自分で作成することもできます.
    関数の定義
    自分が機能したい関数を定義できます.以下は簡単なルールです.
  • 関数コードブロックはdefキーワードで始まり、関数識別子名とカッコ()が続く.
  • 入力パラメータおよび引数は、カッコの中央に配置する必要があります.カッコ間でパラメータを定義できます.
  • 関数の最初の行の文は、関数の説明を格納するためにドキュメント文字列を選択的に使用することができる.
  • 関数の内容はコロンで始まり、インデントされます.
  • return[式]は関数を終了し、呼び出し元に選択的に値を返す.式を持たないreturnはNoneを返すことに相当します.

  • 構文
    def functionname( parameters ): "  _     " function_suite return [expression]

    デフォルトでは、パラメータ値とパラメータ名は、関数宣言で定義された順序で一致します.
    ≪インスタンス|Instance|emdw≫
    以下は単純なPython関数で、文字列を入力パラメータとして標準表示装置に印刷します.
    def printme( str ): "                " print str return

    関数呼び出し
    関数を定義するには、関数に名前を1つだけ与え、関数に含まれるパラメータとコードブロック構造を指定します.
    この関数の基本構造が完成したら、別の関数で実行を呼び出すか、Pythonプロンプトから直接実行することができます.
    次の例ではprintme()関数が呼び出されます.
    #     
    def printme( str ):
       "          "
       print(str);
       return;
     
    #     
    printme("           !");
    printme("        ");

    上記の例は、結果を出力します.
               !
            

    パラメータを値で渡すパラメータと参照で渡すパラメータ
    すべてのパラメータ(引数)はPythonで参照で渡されます.関数でパラメータを変更すると、この関数を呼び出す関数で元のパラメータも変更されます.例:
    #       
    def changeme( mylist ):
       "       "
       mylist.append([1,2,3,4]);
       print("     : ", mylist)
       return
     
    #   changeme  
    mylist = [10,20,30];
    changeme( mylist );
    print("     : ", mylist)

    入力関数のオブジェクトと、最後に新しいコンテンツを追加するオブジェクトは同じ参照を使用します.出力結果は次のとおりです.
         :  [10, 20, 30, [1, 2, 3, 4]]      : [10, 20, 30, [1, 2, 3, 4]]

    パラメータ
    次は、関数を呼び出すときに使用できる正式なパラメータのタイプです.
  • 必須パラメータ
  • キーワードパラメータ
  • デフォルトパラメータ
  • 不定長パラメータ
  • 必須パラメータ
    必須パラメータは、関数に正しい順序で入力する必要があります.呼び出し時の数は、宣言時と同じでなければなりません.
    printme()関数を呼び出すには、パラメータを入力する必要があります.そうしないと、構文エラーが発生します.
     #      
    def printme( str ):
       "          "
       print(str)
       return;
     
    #  printme  
    printme();

    上記の例は、結果を出力します.
    Traceback (most recent call last): File "test.py", line 11, in  printme(); TypeError: printme() takes exactly 1 argument (0 given)

    キーワードパラメータ
    キーワードパラメータと関数呼び出しは密接に関係しており、関数呼び出しはキーワードパラメータを使用して入力されたパラメータ値を決定します.
    キーワードパラメータを使用すると、Python解釈器がパラメータ名でパラメータ値を一致させることができるため、関数呼び出し時のパラメータの順序が宣言時と一致しないことができます.
    次の例では、関数printme()呼び出し時にパラメータ名を使用します.
     #      
    def printme( str ):
       "          "
       print(str);
       return;
     
    #  printme  
    printme( str = "My string");

    上記の例は、結果を出力します.
    My string

    次の例では、キーワードパラメータの順序をより明確に示すことはできません.
    #      
    def printinfo( name, age ):
       "          "
       print("Name: ", name)
       print("Age ", age)
       return;
     
    #  printinfo  
    printinfo( age=50, name="miki" );

    上記の例は、結果を出力します.
    Name:  miki
    Age  50

    デフォルトのパラメータ
    関数を呼び出すと、デフォルトのパラメータの値が入力されない場合は、デフォルトとみなされます.次の例では、ageが入力されていない場合、デフォルトのageが印刷されます.
    #      
    def printinfo( name, age = 35 ):
       "          "
       print("Name: ", name)
       print("Age ", age)
       return;
     
    #  printinfo  
    printinfo( age=50, name="miki" );
    printinfo( name="miki" );

    上記の例は、結果を出力します.
    Name:  miki
    Age  50 Name: miki Age 35

    ふていちょうパラメータ
    当初宣言したときよりも多くのパラメータを処理する関数が必要かもしれません.これらのパラメータは不定長パラメータと呼ばれ、上記2つのパラメータとは異なり、宣言時には名前が付けられません.基本構文は次のとおりです.
    def functionname([formal_args,] *var_args_tuple ): "  _     " function_suite return [expression]

    アスタリスク(*)を付けた変数名には、名前の付いていないすべての変数パラメータが格納されます.マルチパスパラメータを選択しなくてもいいです.次の例を示します.
    #       
    def printinfo( arg1, *vartuple ):
       "         "
       print("  : ")
       print(arg1)
       for var in vartuple:
          print var
       return;
     
    #   printinfo   
    printinfo( 10 );
    printinfo( 70, 60, 50 );

    上記の例は、結果を出力します.
      :
    10
      : 70 60 50

    匿名関数
    pythonはlambdaを使用して匿名関数を作成します.
  • lambdaはただの式で、関数体はdefよりずっと簡単です.
  • lambdaのボディは、コードブロックではなく式です.限られた論理をlambda式にカプセル化できるだけです.
  • lambda関数は、独自のネーミングスペースを持ち、独自のパラメータリストまたはグローバルネーミングスペースのパラメータにアクセスできません.
  • lambda関数は1行しか書けないように見えますが、CまたはC++のインライン関数とは等しくありません.後者の目的は、小さな関数を呼び出すときにスタックメモリを消費せずに実行効率を向上させることです.

  • 構文
    Lambda関数の構文には、次のような文が1つしか含まれていません.
    lambda [arg1 [,arg2,.....argn]]:expression

    次の例を示します.
    #       
    sum = lambda arg1, arg2: arg1 + arg2;
     
    #   sum  
    print "       : ", sum( 10, 20 )
    print "       : ", sum( 20, 20 )

    上記の例は、結果を出力します.
           :  30        : 40

    return文
    return文[式]は関数を終了し、呼び出し元に選択的に式を返します.パラメータ値を持たないreturn文はNoneを返します.前の例では数値を返す方法を示していませんが、次の例ではどうすればいいかを示します.
    #       
    def sum( arg1, arg2 ):
       #   2     ."
       total = arg1 + arg2
       print("    : ", total)
       return total;
     
    #   sum  
    total = sum( 10, 20 );
    print "    : ", total 

    上記の例は、結果を出力します.
        :  30     : 30

    変数スコープ
    1つのプログラムのすべての変数は、どの場所でもアクセスできるわけではありません.アクセス権は、この変数がどこで付与されるかを決定します.
    変数の役割ドメインは、どのプログラムでどの特定の変数名にアクセスできるかを決定します.2つの最も基本的な変数の役割ドメインは次のとおりです.
     
  • グローバル変数
  • ローカル変数
  • グローバル変数とローカル変数
    関数の内部に定義された変数には局所的な役割ドメインがあり、関数の外に定義されたグローバルな役割ドメインがあります.
    ローカル変数は宣言された関数の内部にのみアクセスでき、グローバル変数はプログラム全体にアクセスできます.関数を呼び出すと、関数内で宣言されたすべての変数名が役割ドメインに追加されます.次の例を示します.
    total = 0; #         
    #       
    def sum( arg1, arg2 ):
       #  2     ."
       total = arg1 + arg2; # total        .
       print("         : ", total)
       return total;
     
    #  sum  
    sum( 10, 20 );
    print("         : ", total )

    上記の例は、結果を出力します.
             :  30          : 0

    転載先:https://www.cnblogs.com/peng-lan/p/5413311.html