argparse は、コマンド ライン パラメータを解析するための Python の組み込みライブラリです。開発者が使いやすいコマンド ライン インターフェイスを作成するのに役立ち、ユーザーはコマンド ラインを通じてプログラムにパラメータを渡すことができます。argparse を使用すると、プログラムが受け入れることができるコマンド ライン パラメータのタイプ、番号、ヘルプ テキストを定義できます。
この記事には主に次の内容が含まれます。
まず、argparse の基本的な使用法です。
#导入argparse模块:
import argparse
#创建ArgumentParser对象:
parser = argparse.ArgumentParser(description='Description of your program')
#添加命令行参数:
parser.add_argument('arg_name', type=str, help='Help text for this argument')
#解析命令行参数:
args = parser.parse_args()
#使用解析得到的参数:
print(args.arg_name)
arg_name : パラメーター名。 args.arg_name を通じてパラメーターの値にアクセスできます。
type : パラメーターの型。int、float、str などです。
help : パラメーターのヘルプ テキスト。ユーザーがヘルプを要求したときに表示されます。
parser.add_argument は、コマンドライン引数オプションをパーサーに追加するために使用される argparse.ArgumentParser クラスのメソッドです。
parser.add_argument(name or flags, action, nargs, const, default, type, choices, required, help, metavar)
name or flags : パラメータの名前またはオプション。位置引数の名前 (接頭辞なし)、または接頭辞 - または - - を付けたオプション名を指定できます。たとえば、「filename」は位置パラメータの名前で、「- -output」はオプションの名前です。
action : パラメータのアクション。コマンドラインにパラメータが表示されたときにどのようなアクションを実行するかを指定します。一般的に使用されるアクションは、「store」(値を保存、デフォルト)、「store_const」(定数値を保存)、「store_true」(True を保存)、「store_false」(False を保存)、「append」(値をリストに追加)です。 「append_const」(リストに定数を追加)など。
nargs : 引数の数。このパラメータで受け入れられる値の数を指定します。一般的に使用される値は、None (デフォルト、値を受け入れる)、「?」(0 または 1 つの値を受け入れる)、「*」(0 個以上の値を受け入れる)、「+」(少なくとも 1 つの値を受け入れる) などです。
const : 定数値。パラメータでstore_constアクションを使用する場合、パラメータは保存される定数値を指定します。
default : デフォルト値。このパラメータがコマンドラインで指定されない場合に使用されるデフォルト値。
type : 値のタイプ。パラメータ値を解析するデータ型を指定します。
選択肢: 値の制限。許可されるパラメータ値を指定します。指定された値のみが受け入れられます。
required : 必須かどうか。True に設定した場合、このパラメータは必須であり、指定されていない場合はエラーが報告されます。
help : ヘルプテキスト。このパラメータのヘルプ情報 (通常はパラメータの簡単な説明) を表示するために使用されます。
metavar : ヘルプ メッセージにパラメーターの名前を表示するために使用されます。
上記のパラメータのうち、名前またはフラグ、タイプ、およびヘルプが最もよく使用されるパラメータであり、その他のパラメータは必要に応じて使用されます。実際の使用では、コマンドラインパラメータの要件に応じて、適切なパラメータ設定を柔軟に選択できます。
次に、簡単な例を通して argparse の使用法を説明します。2 つの数値を加算、減算、乗算、除算できる単純な計算プログラムを作成するとします。
calculator という名前の新しい Python ファイルを作成し、次のコードを入力します。
import argparse
def add(x, y):
return x + y
def subtract(x, y):
return x - y
def multiply(x, y):
return x * y
def divide(x, y):
return x / y
parser = argparse.ArgumentParser(description='Simple calculator')
parser.add_argument('operation', type=str, help='Operation to perform: add, subtract, multiply, divide')
parser.add_argument('num1', type=float, help='First number')
parser.add_argument('num2', type=float, help='Second number')
args = parser.parse_args()
if args.operation == 'add':
result = add(args.num1, args.num2)
elif args.operation == 'subtract':
result = subtract(args.num1, args.num2)
elif args.operation == 'multiply':
result = multiply(args.num1, args.num2)
elif args.operation == 'divide':
result = divide(args.num1, args.num2)
else:
print('Invalid operation')
exit(1)
print('Result:', result)
プログラムを実行し、パラメーターを渡すことで、さまざまな操作を実行できます。たとえば、ターミナルで次のコマンドを実行します。
python calculator.py add 10 5
出力結果:
Result: 15.0
または:
python calculator.py divide 10 5
出力結果:
Result: 2.0
ヘルプドキュメントを表示するには、python calculator.py -h を使用します。
python calculator.py -h
見せる:
usage: calculator.py [-h] operation num1 num2
Simple calculator
positional arguments:
operation Operation to perform: add, subtract, multiply, divide
num1 First number
num2 Second number
optional arguments:
-h, --help show this help message and exit
このようにして、ユーザーはコマンド ライン経由でパラメータを渡し、さまざまな計算操作を実行できます。
2、parser.add_argument() 関数
以下に示すように、長い名前と短い名前の両方を持つ parser.add_argument() コードに遭遇することがあります。
# 添加一个可选参数"-s"或"--steps",用于指定MCTS步数,默认值为1000,同时提供帮助信息
parser.add_argument("-s", "--steps", type=int, default=1000, help="Number of MCTS steps"
parser.add_argument() : これは、コマンドライン引数を追加するための argparse モジュール内のメソッドです。このメソッドを呼び出すことにより、プログラムが受け入れるコマンド ライン引数のルールとプロパティを定義します。
「-s」および「--steps」: これら 2 つのパラメーターは、コマンド ライン パラメーターの名前です。「-s」は短いフラグ、「--steps」は長いフラグです。パラメータの値はこれら 2 つのフラグで指定できます。
type=int : パラメータの型指定です。ここでは、パラメータ値は整数型として解釈されます。
default=1000 : これはパラメータのデフォルト値です。コマンドラインに -s または --steps 引数が指定されていない場合、プログラムはデフォルト値の 1000 を使用します。
help="MCTS ステップの数": これは、ユーザーが --help フラグを使用してヘルプを表示するときに表示されるパラメーターの簡単な説明です。ここで、パラメータは MCTS (Monte Carlo Tree Search) ステップ数を指定するために使用されます。
要約すると、このコードは、-s または --steps パラメーターが次の方法で使用できることをプログラムに伝えます。
-s 2000 または --steps 2000: コマンドラインでパラメータ名と値を指定します。
このパラメーターがコマンドラインで指定されていない場合、デフォルトでパラメーター値として 1000 が使用されます。
ユーザーがヘルプを表示する必要がある場合、パラメータの説明「MCTS ステップの数」が表示されます。
argparse モジュールでは、短いフラグ (通常は「-s」などの 1 文字) と長いフラグ (通常は「--steps」などの単語) の両方をコマンド ライン引数に定義できます。このアプローチは、ユーザーがコマンド ラインで同じパラメータをさまざまな方法で指定できるようにすることで、コマンド ラインをより柔軟で使いやすくします。
#使用"-s"标志的示例:
python my_script.py -s 2000
#使用"--steps"标志的示例:
python my_script.py --steps 2000
どちらの方法でもパラメータは 2000 に設定されます。短いフラグは通常、便利なコマンドライン入力に使用され、長いフラグは通常、より具体的で読みやすいオプション名に使用されます。
2 つのフラグを同時に定義することに本質的な違いはなく、名前と使用法が異なるだけです。プログラムは、ユーザーが提供したフラグに基づいてパラメーターを認識し、その値をユーザー指定値またはデフォルト値に設定します。
3. ~と~について
argparse を使用してコマンドライン引数を解析する場合、引数名は通常「- -」で始まります。この目的は、コマンドライン引数と位置引数を区別することです。
元のコードでは、位置引数 (Positional Arguments) を使用しているため、パラメーター名の前に「- -」が追加されていません。位置パラメータにはプレフィックス「- -」は必要ありません。位置パラメータは、コマンド ライン内でパラメータが表示される位置に従って解析されます。script.pyという名前の新しいPython ファイルを作成します。
#script.py
def parse_args():
parser = argparse.ArgumentParser("TreEnhance Hyperparams")
a = parser.add_argument
a("base_dir", help="BASE DIRECTORY")
a("expname",help="Name of the run")
a("dropout", type=float, default=0.6, help="Dropout")
a("num_images", type=int, default=100, help="number of Images")
a("num_steps", type=int, default=10, help="number of steps")
a("val_images", type=int, default=100, help="number of val images")
a("lr", type=float, default=0.001, help="learning rate")
a("size", type=int, default=256, help="image size")
a("num_gen", type=float, default=256, help="number of generation")
a("bs", type=int, default=16, help="batch size")
a("lambd", type=int, default=20, help="lambda in the loss function")
a("loops", type=int, default=5, help="number of optimization loops")
return parser.parse_args()
たとえば、このスクリプトを実行するときは、関数パラメータの順序で対応する値を指定する必要があります。次のように実行できます。
python my_script.py ./path/to/base_dir my_expname 0.6 100 10 100 0.001 256 256 16 20 5
上記のコマンドラインでは、対応する値が関数 parse_args() への引数の順序で提供されます。これらの値は、パラメータの順序に従って、対応するパラメータに割り当てられます。割り当て結果は次のようになります:
base_dir: ./path/to/base_dir
expname: my_expnamedropout
: 0.6
num_images: 100
など
ただし、可読性を向上させ、より柔軟にするため、パラメーターを指定するには、通常、長い形式のコマンド ライン パラメーターを使用すること、つまり、次のコードに示すように、パラメーター名の前に「-」を追加することをお勧めします。
#script.py
def parse_args():
parser = argparse.ArgumentParser("TreEnhance Hyperparams")
a = parser.add_argument
a("--basedir", nargs='?', default='./', help="BASE DIRECTORY")
a("--expname", default="default_exp", help="Name of the run")
a("--dropout", type=float, default=0.6, help="Dropout")
a("--num_images", type=int, default=100, help="number of Images")
a("--num_steps", type=int, default=100, help="number of steps") # 每个epoch训练的迭代步数
a("--val_images", type=int, default=100, help="number of val images")
a("--lr", type=float, default=0.001, help="learning rate")
a("--size", type=int, default=256, help="image size")
a("--num_gen", type=float, default=50, help="number of generation") # 相当于训练的epoch数,256
a("--bs", type=int, default=8, help="batch size")
a("--lambd", type=int, default=20, help="lambda in the loss function")
a("--loops", type=int, default=5, help="number of optimization loops")
return parser.parse_args()
長い形式のコマンド ライン パラメーターを使用して、特定の順序にせずにコマンド ラインでパラメーター値を指定します。これは読みやすく、コマンドラインでオプションの引数を使用できるため、次のように実行できます。
python my_script.py --basedir /path/to/base_dir --expname my_expname --dropout 0.6 --num_images 100 --num_steps 10 --val_images 100 --lr 0.001 --size 256 --num_gen 256 --bs 16 --lambd 20 --loops 5
要約すると、コマンド ライン パラメーターに短いフラグと長いフラグの両方を提供する目的は、コマンド ラインの柔軟性と読みやすさを向上させ、ユーザーが好みやニーズに応じてパラメーター値を指定する適切な方法を選択できるようにすることです。 。
4. args = parser.parse_args() と return parser.parse_args() の違い
args = parser.parse_args() と return parser.parse_args() は戻り値と目的が異なります。
args = parser.parse_args(): このコード行は、parser.parse_args() メソッドを呼び出してコマンド ライン引数を解析し、解析結果を変数 args に保存します。args は、解析されたコマンド ライン引数を含む名前空間オブジェクトです。これらのパラメータの値には、args.expname、args.num_images などの属性を通じてアクセスできます。
# 示例
args = parser.parse_args()
print(args.expname) # 输出:命令行参数中的 expname 参数值
print(args.num_images) # 输出:命令行参数中的 num_images 参数值
return parser.parse_args(): このコード行は、関数の parser.parse_args() メソッドの結果を返します。つまり、この関数を呼び出すと、コマンドライン引数が解析され、解析された結果が関数の戻り値として使用されます。このようにして、関数を呼び出すときに、解析されたパラメーター値を変数に個別に割り当てることなく、直接取得できます。
# 示例
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("--expname", help="Name of the run")
parser.add_argument("--num_images", type=int, default=100, help="number of Images")
# 添加其他命令行参数...
return parser.parse_args()
# 在其他地方调用函数
args = parse_args()
print(args.expname) # 输出:命令行参数中的 expname 参数值
print(args.num_images) # 输出:命令行参数中的 num_images 参数值
概要: parser.parse_args() メソッドは、コマンド ライン引数を解析し、解析結果を名前空間オブジェクトに保存するために使用されます。args = parser.parse_args() この名前空間オブジェクトを変数 args に割り当てて、属性を通じてコマンド ライン パラメーターの値にアクセスできるようにします。return parser.parse_args() は解析結果を関数の戻り値として受け取るため、関数を呼び出すときに追加の代入を行わずに解析されたパラメータ値を直接取得できます。