引数について学んでいきましょう。
関数を呼び出してブロックのコードを実行する時、引数を設定することによって、データを関数に渡すことができます。
引数の具体例
具体的なコードで見ていきましょう。
例えば、正方形の面積を効率よく計算したい場面があったとしましょう。
この時、以下のような関数を作ると、効率よく計算できることがわかります。
コード1 def square(length):
2 print(length * length)
3 return
4 square(10)
アウトプット100
コードの解説(1) 1行目で、squareという名前で関数を定義しました。
関数squareは、引数としてlengthを取ります。
(2) 2行目で、引数lengthを2回かけた「length * length」を計算し、計算した結果をprint関数で出力しています。
(3) return文でブロックを抜けます。
(4) square(10)というコードで、square関数を実行します。かっこの中には10という整数が入っていますが、これが引数(squareに対応するもの)です。
つまり、square関数では引数lengthは10ですので、次の行で10 * 10を計算し、結果の100がprint関数によって出力されます。
イメージで上記のコードの理解を深めていきましょう。このコードのイメージを下の図に示します。(点線が引数を示しています。)
square関数を呼び出すことによって、square関数の中のブロックが順番に実行されます。その時に使われる引数は、suqare関数を呼び出した時に指定した「10」です。
引数の種類について
次に、引数の種類についてみていきましょう。引数には、大きく3つの種類があります。
位置引数(positional argument)
位置引数は普通に使われる引数と考えて構いません。
例えば、このような関数があったとします。
コードdef plus(number1, number2):
print(number1 + number2)
return
plus(5, 9)
アウトプット14
このような関数があった場合のnumber1とnumber2が位置引数です。
デフォルト引数
デフォルト引数は、関数を定義する時にあらかじめ引数を定義しておくことです。
実際にコードを見てみましょう。
コードdef plus(number1=100 , number2=200):
print(number1 + number2)
return
plus関数を定義する中で、number1に100が、number2に200が入っていることが分かります。
このデフォルト引数は、関数を実行するときに引数を指定しなかった場合に使われます。
デフォルト引数が使われる例と、使われない例についてみてみましょう。
コードdef plus(number1=100 , number2=200):
print(number1 + number2)
return
plus()
plus(1,2)
アウトプット300
3
plus()と引数を指定しないで関数を実行した場合の結果は300になっています。
そして、plus(1,2)と引数を指定している場合はその引数が使われたので、3という結果になっています。
可変位置引数、可変キーワード引数
最後は可変位置引数と、可変キーワード引数です。
可変という言葉の通り、上記の2つは事前に引数の数が分からない時に使われます。
可変位置引数
可変位置引数は引数の前に*をつけ、可変キーワード引数の場合は引数の前に**を付けます。
そして、可変位置引数の場合は引数がタプルに格納され、可変キーワード引数の場合は辞書に格納されます。
実際にコードをみてみましょう。まずは可変位置引数です。
コード1 def allprint(str, *args):
2 print(str)
3 for a in args:
4 print(a)
5 allprint('a', 2, 3, 4)
アウトプットa
2
3
4
コードの解説(1) allprintという関数を定義しています。この関数は、strという引数とargsという可変位置引数を取ります。
(2) 2行目で引数strを出力します。
(3) 3行目はfor文です。タプルとして格納されている可変位置引数を順番に取り出し、それをaに入れていきます。
(4) aを順番に出力します。
このコードでは、5行目の関数実行時に('a', 1, 2, 3, 4)を引数としていますが、初めの'a'がstrに、2から4までが*argsに対応します。
可変キーワード引数
次に、可変キーワード引数について見ていきましょう。
これも実際にコードを書いてみます。
コード1 def allprint(str, *kargs):
2 print(str)
3 for a, b in kargs.items():
4 print(a, b)
5 allprint('a', b=2, c=3, d=4)
アウトプットa
b 2
c 3
d 4
コードの解説(1) allprintという関数を定義しています。この関数は、strという引数とkargsという可変キーワード引数を取ります。
(2) 2行目で引数strを出力します。
(3) 3行目はfor文です。辞書として格納されている可変キーワード引数を順番に取り出します。
取り出したデータは、aにkeyが、bにvalueが格納されていきます。
kwargs.items()とitems関数を使ったのは、デフォルトでは辞書がfor文で返すデータがkeyだけだからです。
items関数を使うことにより、keyとvalueの両方のデータを取り出すことができるようになります。
(4) aとbを順番に出力します。
引数として取れる型について
次に、どのような型を引数として取ることができるのかについて学んでいきましょう。
整数
まずは整数です。整数は数学の関数と同じようなイメージで使えるので、分かりやすいと思います。
コードdef plus(a, b):
c = a + b
print(c)
return
とした場合において、以下のように引数を指定することができます。
コードplus(1, 2)
浮動小数点
整数と同じく、浮動小数点も引数に指定することができます。
上記の例では、以下のような形で引数を指定することができます。
コードplus(1.1, 2.2)
アウトプット3.3
リスト
ここから少し分かりづらくなっていきます。
Pythonでは、リストも引数に取ることができます。
以下のような関数を考えてみましょう。
コードname = ['taro', 'satoshi', 'kouji']
def capitalize(name):
for i in name:
print(i.upper())
return
アウトプットTARO
SATOSHI
KOUJI
この関数では、リストとして受け取った名前をfor文による繰り返し処理で取得し、それぞれを大文字にした上でprint関数で出力しています。
この関数を実行するためには、リストに含まれているものが文字列である必要があります。
つまり、引数が関数の中で適切に処理されるのであれば、どのような引数であっても良いということです。
タプル
タプルもリストと同じく、関数の引数として使うことができます。
集合
集合も、リストやタプルと同じく、関数の引数として使うことができます。
辞書
辞書も関数の引数として使うことができます。
例えば、以下のようなコードがあった場合について考えてみましょう。
コードdrink = {'coffee': 100, 'orange': 150, 'tea': 120}
def drinklist(drink):
for name in drink:
print(name)
return
このコードを実行すると、このような結果が出ます。
アウトプットcoffee
orange
tea
つまり、辞書を引数として、それをfor文を使って取り出そうとすると、辞書のKeyを取り出すことができました。
ちなみに、なぜKeyが取り出されたのかというと、デフォルトでそのように設定されているからです。
では、Valueを取りだすにはどうすれば良いでしょうか?引数とは少し関連がなくなってしまいますがその方法について学んでいきましょう。
辞書からvalueを取り出す方法
辞書からvalue(値)を取り出すには、valuesという関数を使います。
実際のコードでみていきましょう。
コードdrink = {'coffee': 100, 'orange': 150, 'tea': 120}
for price in drink.values():
print(price)
アウトプット100
150
120
取り出す元のデータをdrink.values()とすることによって、取り出す対象をvalueにすることができました。
引数のまとめ
(1) 関数にデータを渡すのが引数
(2) 引数には種類がある(位置引数、デフォルト引数、可変位置引数、可変キーワード引数)
引数を学んだあとは
関数と引数を学んだあとは、関数の使い方の応用編のようなイメージであるモジュールについて学んでいきましょう。