pythonを学び始めて最初から3個目くらいの壁と言っていい「引数」と「コマンドライン引数」
初めてpythonを学ぶ方にとっては、かなり理解不能なものなのではないでしょうか
この記事では、pythonで使用する引数について、
サンプルコードと図解を用いて解説していきたいと思います
ぜひ、python独学の参考にしてみてください
Contents
引数とは?
引数というのは、関数に渡す値のことを指しています
関数についてはこちら
>>>pythonにおける関数とは?(…coming soon…)
pythonでは引数のある関数とない関数、どちらも存在していますので、
それぞれ関数の呼び出し方が変わってきます
【戻り値のある関数の呼び出し方】
変数名 = 関数名(引数1, 引数2, …)
【戻り値のない関数の呼び出し方】
関数名(引数1, 引数2, …)
【引数のない関数の呼び出し方】
変数名 = 関数名()
【戻り値のある関数の呼び出し方】
result = get_myname(1,’First’,5)
【戻り値のない関数の呼び出し方】
get_myname(1,’First’,5)
【引数のない関数の呼び出し方】
result = get_myname()
上記の引数定義は「位置引数」と呼ばれる方法になります
キーワード引数とは
位置引数とは別にキーワード引数と呼ばれるものがあります
キーワード引数では、「引数名=値」というキーワードを使って、引数の順番を決めます
関数名(引数1,引数2,....):
キーワード引数では、関数名の後に引数を定義しておきます
def test(chocolate1,chocolate2,chocolate3):
print(chocolate1+"美味しい")
print(chocolate2+"安い")
print(chocolate3+"高い")
test(chocolate3="GODIVA",chocolate1="小枝",chocolate2="ブラックサンダー")
test(chocolate1="小枝",chocolate3="GODIVA",chocolate2="ブラックサンダー")
test(chocolate1="小枝",chocolate2="ブラックサンダー",chocolate3="GODIVA")
キーワード引数では、関数呼び出し時に「実引数をどのパラメーターに渡すか」を
「パラメーター名=実引数の値」として指定をします
この時、関数定義のパラメーターリストに並べた通りの順番に引数を渡す必要はありません
print()で表示をさせると、引数を与える順番に関係なく、3つの出力結果が同じであることがわかります
- 仮引数:関数の定義側で受け取る値
- 実引数:関数の呼び出し側で与える値
可変長引数とは?
pythonの関数では引数の個数をいくるでも受け取ることができる関数を定義することができます
可変長の引数を定義するためには、可変長引数の前に「*(アスタリスク)」をつけます
(※可変長:長さや桁数・文字数の大きさが定まっていないこと)
def test(chocolate,*args):
print(chocolate,args)
chocolate("KitKat",1,2,[1,2,3])
chocolate("KitKat")
可変長で与えた引数はタプルとして扱われます
また、可変長引数に引数を渡さなかった場合には、空のタプルとして扱われます
>>>pythonの独学を進める上で大切なタプルについて(…coming soon…)
*(アスタリスク)を1つつけただけの可変長引数はキーワード指定した引数は受け取ることができないため、注意が必要です
キーワード指定された未定義の引数
**アスタリスクを2つつけることで、キーワード指定された未定義の引数を受け取ることができます
キーワード指定された引数は、キーワードをキー値とした辞書型として扱われます
>>>pythonの独学を進める上で大切な型について(…coming soon…)
def test(chocolate,**args):
print(chocolate,args)
chocolate("KitKat",y="koeda",z="Black thunder")
デフォルト引数とは?
デフォルト引数とは、関数を定義した際にあらかじめ指定の値を入力しておくと、
引数を指定しなくても、関数を呼び出した時に、その値でプログラムを実行してくれます
def test(chocolate1="小枝",chocolate2="ブラックサンダー",chocolate3="GODIVA"):
print(chocolate1+"美味しい")
print(chocolate2+"安い")
print(chocolate3+"高い")
test()
コマンドライン引数とは?
コマンドライン引数とは、pythonでプログラムを実行する際に指定する引数のことです
引数が関数に対してでしたが、コマンドライン引数は.pyに対して指定します
そのため、コマンドライン引数は、プログラム実行時に動作を変更させたい場合に使うことが多いです
Python ファイル名.py 引数1 引数2 引数3…
コマンドライン引数の基本的な渡し方は上記のようになります
実際にファイル名、引数を設定すると以下のようになります
Python test.py sample1 sample2 sample3
sample1が第一引数、sample2が第二引数…
となっています
コマンドライン引数の取得方法
コマンドライン引数の取得方法には、
- sys.argv
- argparse
のどちらかを使用することになります
sys.argvの使い方
ではsys.argvを使ってコマンドライン引数を取得してみましょう
#python標準モジュールのsys.argvを呼び出す
import sys
#コマンドライン引数の参照
print (sys.argv[0])#ファイル名
print (sys.argv[1])#1番目の引数
print (sys.argv[2])#2番目の引数
では実際にコードを実行していきます
test.py
これだけだとファイルパスである「test.py」のみが実行結果として出てきます
test.py sample1 sample2
引数を渡して実行すると
「test.py sample1 sample2」という実行結果が返ってきます
argparseの使い方
ここからはargparseを使ったコマンドライン引数の使い方について解説をしていきます
#argparseの呼び出し
import argparse
#パーサーの作成
parser = argparse.ArgumentParser( )
#コマンドライン引数の設定
parser.add_argument( )
#コマンドライン引数の解析
args = parser.parse_args( )
import argparse
parser = argparse.ArgumentParser(descriotion=‘テストコードです’)
parser.add_argument(‘arg1’)
parser.add_argument(‘arg2’ help=‘aaaaaa’)
args = parser.parse_args( )
print(‘arg1=’+args.arg1)
print(‘arg2=’+args.arg2)
#実行結果
$ Python test.py sample1 sample2
arg1 = sample1
arg2 = sample2
パーサー作成時によく使用される引数は、
- prog:プログラムの名称
- usage:プログラムの利用方法の説明
- description:プログラムの説明
となっています
今回はdescriptionを使用して、プログラムの説明を行っています
また、コマンドライン引数は複数設定可能で、コードに引数を追加することができます
よく使用される引数は、
- help:引数の説明
- type:プログラムの文字列を変換。指定しなければstr型として扱われる
となっています
今回は引数の説明を行う、helpを使用しています
まとめ
pythonにはさまざまな引数が用意されており、自分の作りたいプログラムに合わせて使用する引数を選択することができるできます
文章を読むだけでは理解が難しいので、実際にコードを書きながら実践してみてください
引数をうまく扱うことができれば、処理の幅が広がり、複雑な操作もできるようになります
Python学習でつまづかないためには?
Python学習を進めていく上で、
「ひとまず何かしらの書籍に目を通したい」
「webで調べても全くわからない」
という状況が何度も何度でも出てくるかと思います。
そういう時に便利なのが、kindleとテラテイルです。
Kindleはご存知の通り、電子書籍です。
Kindleには多くのpython学習本が用意されており、無料で読むことができます。(たまに有料もあります)
ひとまずどういった書籍があるのか?
もしものために、書籍に目を通しておこう
という場合には、kindleの利用がおすすめです。
また、webで調べて、試行錯誤しても全くわからない…
っていう状況を打破してくれる、手助けしてくれるのが、テラテイルです。
実現したいこと・エラーメッセージ・コードなどを記載すれば、プロのエンジニアの方々が手助けをしてくれます。
どちらも登録しておいて損はないサイトです。
Python初心者はぜひ利用してみてください。