⑮Python関数

スポンサーリンク

プログラマになるのに遅いということはない!
天職を本気で考えている方向けのプログラミングスクールです。 転職を保証しているため、未経験からIT業界へ転職を求めている方へおすすめです! 学習終了から3ヶ月で転職できなかったら 全額返金制度あり!

----------------------------------------------------------------------------------------

Python関数




既にご存知の通り、Pythonはprint()などの多くの組み込み関数を提供しますが、独自の関数を作成することもできます。これらの関数はユーザー定義関数と呼ばれます。

関数の定義

Pythonで関数を定義する簡単な規則を以下に示します。

  • 関数ブロックは、キーワードdef、関数名、カッコ(())で始まる。
  • カッコ内には、入力パラメータまたは引数を配置する必要があります。またこれらの括弧内にパラメータを定義することも可能。
  • 関数の最初のステートメントは、オプションのステートメント(関数またはドキュメントストリングのドキュメンテーション文字列)です。
  • すべての関数内のコードブロックはコロン(:)で始まりインデントされます。
  • 文return [expression]は関数を終了し、必要に応じて式を呼び出し元に戻します。引数のないreturn文は、返り値Noneと同じです。

構文



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

デフォルトでは、パラメータは位置的な振る舞いを持ち、定義されたのと同じ順序で通知する必要があります。

次の関数は文字列を入力パラメータとして標準画面に出力します。

def printme( str ):
   "This prints a passed string into this function"
   print str
   return

関数の呼び出し

関数を定義することは、名前だけを与え、関数に含めるパラメータを指定し、コードブロックを構造化します。

関数の基本構造が完成したら、別の関数かPythonプロンプトから直接呼び出して実行することができます。以下は、printme()関数を呼び出す例です。

#!/usr/bin/python

# 関数の定義はここ
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# ここで呼び出せる
printme("最初のメッセージ")
printme("つぎのメッセージ")

上記のコードを実行すると、次の結果が生成されます。

最初のメッセージ
つぎのメッセージ

参照渡し値渡し

Python言語のすべてのパラメータ(引数)は参照渡しに渡されます。つまり、関数内でパラメーターが参照するものを変更すると、その変更は呼び出し元のお関数にも反映されます。たとえば –

#!/usr/bin/python


def changeme( mylist ):
  
   mylist.append([1,2,3,4]);
   print "Values inside the function: ", mylist
   return


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]]

引数が参照渡しされ、参照が呼び出された関数の内部で上書きされるというもう1つの例があります。

#!/usr/bin/python


def changeme( mylist ):

   mylist = [1,2,3,4]; # This would assig new reference in mylist
   print "Values inside the function: ", mylist
   return


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()関数を呼び出すには、引数を1つ渡す必要があります。それ以外の場合は、次のように構文エラーが発生します。

#!/usr/bin/python


def printme( str ):
   "This prints a passed string into this function"
   print str
   return;


printme()

上記のコードが実行されると、次の結果が生成されます。

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    printme();
TypeError: printme() takes exactly 1 argument (0 given)

キーワードの引数

キーワード引数は、関数呼び出しに関連しています。関数呼び出しでキーワード引数を使用すると、呼び出し側は引数をパラメータ名で識別します。

これにより、Pythonインタプリタは、指定されたキーワードを使用して値とパラメータを一致させることができるため、引数をスキップしたり順序を入れ替えたりすることができます。printme()関数のキーワード呼び出しは、次の方法で行うこともできます。

#!/usr/bin/python


def printme( str ):
   "This prints a passed string into this function"
   print str
   return;


printme( str = "My string")

上記のコードを実行すると、次の結果が生成されます。

My string

次の例は、より明確な画像を示しています。パラメータの順序は関係ありません。

#!/usr/bin/python

def printinfo( name, age ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;


printinfo( age=50, name="miki" )

上記のコードを実行すると、次の結果が生成されます。

Name:  miki
Age  50

デフォルトの引数

デフォルトの引数は、その引数の関数呼び出しで値が指定されていない場合に、デフォルト値を引き継ぐ引数です。次の例は、デフォルトの引数についてのアイデアを示し、渡されない場合はデフォルトの年齢を出力します。

#!/usr/bin/python


def printinfo( name, age = 35 ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

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

def printinfo( arg1, *vartuple ):
   "This prints a variable passed arguments"
   print "Output is: "
   print arg1
   for var in vartuple:
      print var
   return;


printinfo( 10 )
printinfo( 70, 60, 50 )

上記のコードを実行すると、次の結果が生成されます。

Output is:
10
Output is:
70
60
50

匿名関数

これらの関数は、defキーワードを使用して標準的な方法で宣言されていないため、匿名と呼ばれます。lambdaキーワードを使用すると、小さな匿名関数を作成できます。

  • ラムダフォームは任意の数の引数を取ることができますが、式の形でただ1つの値を返します。コマンドや複数の式を含むことはできません。
  • ラムダには式が必要なため、無名関数はprintへの直接呼び出しではありません
  • ラムダ関数は独自のローカル名前空間を持ち、パラメータリスト以外の変数やグローバル名前空間の変数にはアクセスできません。
  • ラムダは関数の1行バージョンであるように見えますが、パフォーマンス上の理由から呼び出す際に関数スタックの割り当てを渡すことによって、CまたはC ++のインラインステートメントと同等ではありません。

構文

ラムダ関数の構文には、次のような単一の文だけが含まれます。

lambda [arg1 [,arg2,.....argn]]:expression

以下は、関数のラムダ形式がどのように機能するかを示す例です。

#!/usr/bin/python


sum = lambda arg1, arg2: arg1 + arg2;

 
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )

上記のコードを実行すると、次の結果が生成されます。

Value of total :  30
Value of total :  40

リターンステートメント

文return [expression]は関数を終了し、必要に応じて式を呼び出し元に戻します。引数のないreturn文は、返り値Noneと同じです。

上記の例はすべて値を返していません。次のように関数から値を返すことができます。

#!/usr/bin/python

def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2
   print "Inside the function : ", total
   return total;

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.
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;

sum( 10, 20 );
print "Outside the function global total : ", total 

上記のコードを実行すると、次の結果が生成されます。

Inside the function local total :  30
Outside the function global total :  0

前のページ⑭Pythonの日付と時刻

次のページ⑯Pyrhonモジュール

スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。