Pythonの各種関数の使用を詳しく解く

9535 ワード

関数は組織的で、繰り返し使用可能なコードであり、単一の関連する動作を実行するブロックに使用されます.関数は、アプリケーションとコードの再利用の高さに優れたモジュールを提供します.
私たちが知っているように、Pythonのprint()など多くの内蔵関数がありますが、独自の関数を作成することもできます.これらの関数をユーザー定義関数と呼びます.関数の定義
必要な機能を提供するために関数を定義できます.以下はPython関数を定義する簡単なルールです.
  • 関数ブロックは、キーワードdefの後に関数名と括弧()を開始するために使用される.
  • 入力パラメータまたはパラメータは、これらのカッコ内に配置する必要があります.これらのカッコ内のパラメータを定義することもできます.
  • 関数の最初の文は?オプションの宣言-関数またはドキュメント文字列のドキュメント文字列.
  • 各関数のコードブロックは、コロン(:)で始まり、インデントされます.
  • この文は[式]終了機能を返し、オプションで呼び出し元に式を返します.パラメータreturn文なしでNoneを返します.

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

    デフォルトでは、パラメータは同じ順序で通知するように定義された位置の動作と必要性を有します.例:
    これは最も簡単なPython関数形式です.この関数は、入力パラメータとして文字列を受け入れ、標準の画面に印刷します.
    
    def printme( str ):
      "This prints a passed string into this function"
      print str
      return
    
    

    呼び出し関数
    関数を定義して名前だけを指定し、機能と構造に含めるコードブロックのパラメータを指定します.
    関数の基本構造が決定されると、他の関数から呼び出すか、Pythonプロンプトから直接呼び出すことで実行できます.次にprintme()関数の呼び出し例を示します.
    
    #!/usr/bin/python
    
    # Function definition is here
    def printme( str ):
      "This prints a passed string into this function"
      print str;
      return;
    
    # Now you can call printme function
    printme("I'm first call to user defined function!");
    printme("Again second call to the same function");
    
    

    上記のコードを実行すると、次の結果が得られます.
    
    I'm first call to user defined function!
    Again second call to the same function
    
    

    参照VS値転送
    すべてのパラメータ(パラメータ)はPython言語で参照によって伝達される.これは、1つの関数でパラメータの値を変更した場合、変化も呼び出し関数に反映されることを意味します.例:
    
    #!/usr/bin/python
    
    # Function definition is here
    def changeme( mylist ):
      "This changes a passed list into this function"
      mylist.append([1,2,3,4]);
      print "Values inside the function: ", mylist
      return
    
    # Now you can call changeme function
    mylist = [10,20,30];
    changeme( mylist );
    print "Values outside the function: ", mylist
    
    

    ここでは、渡されたオブジェクトの参照を維持し、同じオブジェクトに値を追加します.これにより、次の結果が得られます.
    
    Values inside the function: [10, 20, 30, [1, 2, 3, 4]]
    Values outside the function: [10, 20, 30, [1, 2, 3, 4]]
    
    

    また,パラメータが参照伝達と参照によって呼び出された関数に上書きされる例もある.
    
    #!/usr/bin/python
    
    # Function definition is here
    def changeme( mylist ):
      "This changes a passed list into this function"
      mylist = [1,2,3,4]; # This would assig new reference in mylist
      print "Values inside the function: ", mylist
      return
    
    # Now you can call changeme function
    mylist = [10,20,30];
    changeme( mylist );
    print "Values outside the function: ", mylist
    
    

    パラメータmyList上のローカル関数changeme.関数内のmylistを変更してもmylistには影響しません.関数は機能しません.最後に、次の結果が得られます.
    
    Values inside the function: [1, 2, 3, 4]
    Values outside the function: [10, 20, 30]
    
    

    関数パラメータ:
    パラメータのタイプを使用すると、次のように関数を呼び出すことができます.
  • 必須パラメータ
  • キーワードパラメータ
  • デフォルトパラメータ
  • 可変長パラメータ
  • 必須パラメータ:
    必要なパラメータは、正しい位置順序に渡される関数のパラメータです.ここで、関数呼び出しのパラメータの数は、関数定義と完全に一致する必要があります.
    関数printme()を呼び出します.パラメータを渡す必要があります.そうしないと、構文エラーが次のように表示されます.
    
    #!/usr/bin/python
    
    # Function definition is here
    def printme( str ):
      "This prints a passed string into this function"
      print str;
      return;
    
    # Now you can call printme function
    printme();
    
    

    上記のコードを実行すると、次の結果が得られます.
    
    Traceback (most recent call last):
     File "test.py", line 11, in 
      printme();
    TypeError: printme() takes exactly 1 argument (0 given)
    
    

    キーワードパラメータ:
    キーワードパラメータは、関数呼び出しに関係します.関数呼び出しでキーワードパラメータを使用すると、呼び出し元はパラメータ名で識別されるパラメータです.
    これは、Pythonインタプリタが指定したパラメータを使用して一致する値のキーワードを使用できるため、パラメータをスキップしたり、順序を外したりすることができます.キーワード呼び出しはprintme()関数で次のようにすることもできます.
    
    #!/usr/bin/python
    
    # Function definition is here
    def printme( str ):
      "This prints a passed string into this function"
      print str;
      return;
    
    # Now you can call printme function
    printme( str = "My string");
    
    

    上記のコードを実行すると、次の結果が得られます.
    
    My string
    
    

    次の例では、より明確な画面を示します.ここではパラメータ秩序とは関係ないことに注意してください.
    
    #!/usr/bin/python
    
    # Function definition is here
    def printinfo( name, age ):
      "This prints a passed info into this function"
      print "Name: ", name;
      print "Age ", age;
      return;
    
    # Now you can call printinfo function
    printinfo( age=50, name="miki" );
    
    

    上記のコードを実行すると、次の結果が得られます.
    
    Name: miki
    Age 50
    
    

    デフォルトのパラメータ:
    デフォルトパラメータは、関数呼び出しのパラメータ値が指定されていない場合のデフォルト値を仮定します.次の例では、デフォルトパラメータのアイデアを示します.ageがデフォルトで印刷され、値が送信されない場合は、次のようにします.
    
    #!/usr/bin/python
    
    # Function definition is here
    def printinfo( name, age = 35 ):
      "This prints a passed info into this function"
      print "Name: ", name;
      print "Age ", age;
      return;
    
    # Now you can call printinfo function
    printinfo( age=50, name="miki" );
    printinfo( name="miki" );
    
    

    上記のコードを実行すると、次の結果が得られます.
    
    Name: miki
    Age 50
    Name: miki
    Age 35
    
    

    可変長パラメータ:
    定義された関数よりも関数を処理して複数のパラメータを指定する必要がある場合があります.これらのパラメータは可変長パラメータと呼ばれ、関数定義には名前が付けられず、必須のデフォルトパラメータとは異なります.
    非キーワード可変パラメータの関数の一般的な構文は次のとおりです.
    
    def functionname([formal_args,] *var_args_tuple ):
      "function_docstring"
      function_suite
      return [expression]
    
    

    アスタリスク(*)が配置され、持つすべての非キーワード変数パラメータの値が変数名になります.関数呼び出し中に他のパラメータが指定されていない場合は、メタグループは空のままです.簡単な例を次に示します.
    
    #!/usr/bin/python
    
    # Function definition is here
    def printinfo( arg1, *vartuple ):
      "This prints a variable passed arguments"
      print "Output is: "
      print arg1
      for var in vartuple:
       print var
      return;
    
    # Now you can call printinfo function
    printinfo( 10 );
    printinfo( 70, 60, 50 );
    
    

    上記のコードを実行すると、次の結果が得られます.
    
    Output is:
    10
    Output is:
    70
    60
    50
    
    

    匿名関数:
    Lambdaキーワードを使用して、小さな匿名関数を作成できます.これらの関数は、defキーワードを使用して標準的に宣言されていないため、匿名と呼ばれます.
  • Lambda形式は任意の数のパラメータをとることができるが、表現形式では1つの値しか返さない.コマンドまたは複数の式を含めることはできません.
  • 匿名関数は、lambda式が必要であるため、印刷を直接呼び出すことはできません.
  • lambda関数には独自のネーミングスペースがあり、パラメータリストやグローバルネーミングスペースなどよりも変数にアクセスできません.
  • lambdaは、CまたはC++ではない関数の単行バージョンであるようですが、パフォーマンスの理由で伝達関数のスタック割り当てが1行に相当する宣言を呼び出すことを目的としています.

  • 構文
    Lambda関数の構文には、次のような単一の文のみが含まれます.
    
    lambda [arg1 [,arg2,.....argn]]:expression
    
    

    次の例では、関数lambda形式がどのように動作するかを説明します.
    
    #!/usr/bin/python
    
    # Function definition is here
    sum = lambda arg1, arg2: arg1 + arg2;
    
     
    
    # Now you can call sum as a function
    print "Value of total : ", sum( 10, 20 )
    print "Value of total : ", sum( 20, 20 )
    
    

    上記のコードを実行すると、次の結果が得られます.
    
    Value of total : 30
    Value of total : 40
    
    

    return文:
    この文は[式]終了機能を返し、オプションで呼び出し元に式を返します.パラメータreturn文なしでNoneを返します.
    上記の例はすべて値を返していませんが、好きな場合は関数から値を返すことができます.
    
    #!/usr/bin/python
    
    # Function definition is here
    def sum( arg1, arg2 ):
      # Add both the parameters and return them."
      total = arg1 + arg2
      print "Inside the function : ", total
      return total;
    
    # Now you can call sum function
    total = sum( 10, 20 );
    print "Outside the function : ", total 
    
    

    上記のコードを実行すると、次の結果が得られます.
    
    Inside the function : 30
    Outside the function : 30
    
    

    変数の役割ドメイン:
    プログラム内のすべての変数は、プログラム内のすべての場所にアクセスしない可能性があります.これは、宣言された変数に依存します.
    変数の役割ドメインは、特定の識別子の一部にアクセスできるプログラムを決定します.Pythonの変数の2つの基本的なカテゴリ:
  • グローバル変数
  • ローカル変数
  • グローバル変数とローカル変数:
    これは、関数体の内部で定義された変数がローカル範囲を有し、それらの外部定義がグローバル範囲を有するものです.
    ローカル変数は関数内部でのみ宣言およびアクセスできますが、グローバル変数はプログラム本体全体ですべての関数によってアクセスできます.関数を呼び出すと、宣言された変数が範囲に含まれます.簡単な例を次に示します.
    
    #!/usr/bin/python
    
    total = 0; # This is global variable.
    # Function definition is here
    def sum( arg1, arg2 ):
      # Add both the parameters and return them."
      total = arg1 + arg2; # Here total is local variable.
      print "Inside the function local total : ", total
      return total;
    
    # Now you can call sum function
    sum( 10, 20 );
    print "Outside the function global total : ", total 
    
    

    上記のコードを実行すると、次の結果が得られます.
    
    Inside the function local total : 30
    Outside the function global total : 0