「Python関数の引数って何?」「Pythonで関数引数の使い方がわからない!」という疑問や悩みを持っていませんか?
そんな悩みや疑問を解消できるように、この記事ではPythonの関数引数(位置引数・デフォルト引数・キーワード引数・可変長引数)について解説しています。
この講座は、これからPythonを学ぼうとする初心者の方がPythonの基本を学ぶための講座です。
Pythonの代表的な構文の使い方を具体的なコードを例にして解説しています。
この記事は、以下のような方におすすめ!
Pythonの関数引数の使い方を知りたい方
Pythonの関数引数とは何か知りたい方
Pythonの関数引数には、位置引数、デフォルト引数、キーワード引数、可変長引数の4種類があります。
プライベートでコーディングしているうちは支障がありませんが、他の方が書いたコードを読むときに「あれ?こんな使い方知らない!」とならないようにしておきましょう。
この記事を読めば、Pythonの関数引数の扱い方を学ぶことができます!
Pythonの基本をマスターして、Pythonプログラマーとしての一歩を踏み出しましょう!
前回の振り返り
前回の記事では、Pythonの関数定義について解説しました。
Pythonの関数の扱い方を確認できていない方は、こちらの記事もチェックしておきましょう。
今回のゴール
では、改めて今回のゴールを確認しましょう。
今回のゴールは、Pythonの関数引数について学び、実際に動作を確認することです。
今回の内容もコード例に沿ってご自身の手で動作を確認するようにしてください。
Pythonの関数引数
関数の引数とは、関数に渡される値やデータのことです。
これにより、関数は外部からのデータや値を受け取り、その情報をもとに処理を実行することができます。
引数は関数の定義時に指定され、関数が呼び出される際に実際の値が渡されます。
単に引数と言っても、位置引数、デフォルト値の指定やキーワード指定、可変長引数(任意引数)など、様々な要素があります。
個人的には面白さを感じる領域だなと感じていますので、是非皆さんにもその面白さを伝えられたらなと思います。
それでは、それぞれのPythonの関数引数ついて一緒に確認していきましょう!
位置引数
位置引数は、基本的な引数で、関数に値を順番に渡します。
つまり、定義した引数の順番に意味がある引数です。
# 位置引数を使った関数定義
def add(a, b):
return a + b
# 呼び出し方
add(5, 9)
14
デフォルト引数
デフォルト引数は、関数を定義する際に値を設定することができ、呼び出し時に引数が渡されない場合は、このデフォルト値が使用されます。
以下のように引数を指定する際に、デフォルト値を指定します。
このプログラムは、ユーザーが欲しいアイテム数を入力すると、メッセージと残りの在庫数を教えてくれます。
在庫がないと店を閉めるというなんとも冷たいお店です笑
# デフォルト引数を使った関数定義
def shop(ask, stock=10, notice=' Plese enter a number! '):
while True:
amount = int(input(ask + notice))
if (stock - amount) > 0:
stock = stock -amount
print('OK, please take it yourself. stock:',stock)
else:
print('Oh, I\'m sorry. No more in stock.')
return print('Closed.')
# 関数の呼び出しでは、渡している引数は一つだけです
shop('How many items do you want?')
How many items do you want? Plese enter a number! >? 4
OK, please take it yourself. stock: 6
How many items do you want? Plese enter a number! >? 8
Oh, I'm sorry. No more in stock.
Closed.
いくつか数字を入力していくと、上記のような結果を得られます。
呼び出し時に渡している引数は一つだけですが、デフォルト値が使用されちゃんと動いていることがわかりますね。
デフォルト引数は定義時の値を保持する
例えばですが、以下のような場合を見てみるとよくわかります。
default = 1
# デフォルト値を先に定義した上で、デフォルト引数を関数定義
def func(arg=default):
print(arg)
default = 2
func()
1
いかがですか?皆さんの想像通りの結果でした?
出力結果は1
でした。
引数は指定していないので、デフォルト値が採用されますが、採用された値は定義時の値になるということです。
デフォルト引数に指定したリストは保持される
以下のように引数にリスト型を指定した場合は、リストが引き継がれることに注意ししましょう。
# 関数を定義
def func(arg,lst=[]):
lst.append(arg)
return lst
# 関数の呼び出し
func(1)
func(2)
func(3)
[1]
[1, 2]
[1, 2, 3]
引き継がないようにするためには、以下のようなコードにする必要があります。
デフォルト引数ではなく、処理の中で空のリストにする処理を入れる必要があります。
# 関数を定義
def func(arg,lst=None):
if lst is None:
lst = []
lst.append(arg)
return lst
# 関数の呼び出し
func(1)
func(2)
func(3)
[1]
[2]
[3]
キーワード引数
キーワード引数は、引数の名前を指定して値を渡すことができ、引数の順番を自由に変更することが可能です。
# キーワード引数を使った定義
def func(a, b='earth', c='pink', d='red'):
print(a, b, c, d)
# 関数の呼び出し
func(a='sea', b='sky', c='blue', d='yellow')
sea sky blue yellow
引数名を指定しているので、順序を入れ替えても同じ結果を得ることができます。
ですが、デフォルト値が指定されている引数が、デフォルト値が指定されていない引数より先に記述されるのはNGです。
# OKパターン
func(b='sky', c='blue', d='yellow', a='sea')
sea sky blue yellow
# OKパターン
func('sea', c='blue')
sea earth blue red
引数種類に応じて渡す順番を守ればOKですが、以下はNGパターンです。
# NGパターン
func(b='sky', 'sea')
SyntaxError: positional argument follows keyword argument
可変長引数(任意引数)
可変長引数(任意引数)とは、引数を任意の数受け取ることができる引数です。
つまり定義時点では、引数の数が定まっていないということになります。
*args
は非キーワード引数をタプルとして受け取ります。**kwargs
はキーワード引数を辞書として受け取ります。
サンプルコードを見てみましょう。
*args
は複数の任意の数の引数を受け取っています。
このようにアスタリスク*
を付けることで任意引数を定義することができます。
また同様に、**keywords
は任意の数のキーワード引数を受け取っています。キーワード引数の任意引数を定義する際は**
を付けます。
def combiner(*args, **keywords):
for arg in args:
print(arg)
print('-' * 20)
keys = keywords.keys()
for key in keys:
print(key, ":", keywords[key])
combiner('e', 'a', r='r', t='t', h='h')
e
a
--------------------
r : r
t : t
h : h
おまけ:引数リストのアンパック
任意引数の説明とは直接関係はないのですが、引数リストの処理に関連した機能を紹介したいと思います。
リストや辞書型でデータを保持しているリストを、関数の引数に指定したい場合に、引数リストのアンパックを利用すると、非常にシンプルに記述できます。
def combiner(*args, joint='-'):
return joint.join(args)
sample = ['1', '6']
combiner(*sample)
'1-6'
お分かりでしょうか。
リスト型だったsampleを、文字列に変換(アンパック)して引数として関数に渡しています。
まとめ
今回の記事では、Pythonの関数引数ついて解説しました。
今回のポイントをまとめると、次のとおりです。
- 関数引数には、位置引数、デフォルト引数、キーワード引数、可変長引数の4つがある。
- キーワード引数は、引数の順番を自由に変更することが可能。
- 可変長引数とは、引数を任意の数受け取ることができる引数。
Pythonの関数引数を知り、コーディングの幅が広くなると感じていただけたでしょうか。
Pythonの関数引数を使いこなすことで、シンプルでスマートなコーディングが可能になります。
ぜひこの記事を参考にして、Pythonの関数引数をマスターしてください!
以上、最後までお読みいただきありがとうございました。
未経験からのITエンジニア転職に挑戦したい方へ
転職も含めて真剣にプログラミングスキルを手に入れたいとお考えの方に、おすすめの方法をご紹介します。
結論から言うと、それは転職活動とスキル学習を同時に進める方法です!
同時に進める理由は、転職成功までの時間を短縮するためなんですが、
でも昼間は学校や本業もあるのに、転職活動と学習を同時にって無理!
って思いますよね?
そんな忙しい方には、スキル学習と転職サポートが一体となているウズカレIT
しかも、学習サポートも転職サポートも無料で利用できます!
ウズカレITはITスクールのウズウズカレッジ
体系的かつ総合的に学習サポートを受けることができます。
ITエンジニアはまだまだ売り手市場で、未経験可の求人もたくさんあります。
一度、ウズカレITの無料相談で不安に思ってることなどを相談してみるのがオススメです。