Pythonにて、argparseの引数名は呼び出す関数の変数名に合わせておくべき3つの理由を紹介します!
おすすめの読者
- argparseの活用方法がわからない方
- argparseの引数名に迷っている方
- argparseをより活用したい方
リンク
【結論】argparseの引数名は呼び出す関数の変数名に合わせておくべき!
結論、argparseの引数名は呼び出す関数の変数名に合わせておくべきです。
本記事の内容を深く理解するためには、 入門 Python 3
と Effective Python Pythonプログラムを改良する90項目
がおすすめです!
理由3選
- キーワード引数 kwargs形式で関数呼び出しを行うことができるため!
- コードの一貫性が保たれ、可読性があがるため!
- 呼び出し側の関数仕様の変更に対応することができるため!
キーワード引数 kwargs形式で関数呼び出しを行うことができるため!
argparseでは、下記手順でkwargs引数形式にて関数呼び出しが可能です!
- 16行目:parser.parse_args()`のように、引数入力の情報を受け取った後に、
- 17, 18行目:辞書形式に変換した後、キーワード引数の形式で関数呼び出し
def main(name: str, age: int, weight: float):
print(f"name is {name}")
print(f"age is {age}")
print(f"weight is {weight}")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name", type=str)
parser.add_argument("-a", "--age", type=int, default=20)
parser.add_argument("--weight", type=float, default=60.0)
args = parser.parse_args()
kwargs = args.__dict__
main(**kwargs)
シェル側からは、以下のように呼び出します。
$ python argparse_name.py taro -a 18 --weight 65.0
name is taro
age is 18
weight is 65.0
コードの一貫性が保たれ、可読性があがるため!
argparseの出力をキーワード引数で渡すことで、コードの一貫性が保たれ、可読性が向上します!
下記、コードの一貫性が保たれず、不用意に読みにくくなってしまう例です。
def main(friend_name: str, friend_age: int, friend_weight: float):
print(f"name is {friend_name}")
print(f"age is {friend_age}")
print(f"weight is {friend_weight}")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name", type=str)
parser.add_argument("-a", "--age", type=int, default=20)
parser.add_argument("--weight", type=float, default=60.0)
args = parser.parse_args()
args = args.__dict__.values() # 辞書の値のみを抽出
main(*args) # 位置引数で渡す
$ python argparse_name.py taro -a 18 --weight 65.0
name is taro
age is 18
weight is 65.0
呼び出し側の関数仕様の変更に対応することができるため!
agparseでは、キーワード引数を活用することで、関数の仕様変更に対応することができます!
- 呼び出し側引数が削除:予期しないキーワード引数の入力により、エラー発生
- 呼び出し側引数が追加:必要なキーワード引数の入力不足により、エラー発生
def main(name: str, age: int, height: float): # 新しい引数heightが追加され、weightが削除
print(f"name is {name}")
print(f"age is {age}")
# print(f"weight is {weight}")
print(f"height is {height}")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name", type=str)
parser.add_argument("-a", "--age", type=int, default=20)
parser.add_argument("--weight", type=float, default=60.0)
args = parser.parse_args()
kwargs = args.__dict__
main(**kwargs)
$ python argparse_name.py taro -a 18 --weight 65.0
Traceback (most recent call last):
File "*/argparse_name.py", line 19, in <module>
main(**kwargs)
TypeError: main() got an unexpected keyword argument 'weight'
【まとめ】argparseの引数名は呼び出す関数の変数名と一緒に!
argparseの引数名は呼び出す関数の変数名に合わせておくべき理由3選を解説しました!
理由3選
- キーワード引数 kwargs形式で関数呼び出しを行うことができるため!
- コードの一貫性が保たれ、可読性があがるため!
- 呼び出し側の関数仕様の変更に対応することができるため!
リンク