在 Python 中,可以使用 argparse 模块来控制代码的参数。argparse 可以读取命令行输入的参数,并根据定义的规则进行解析和处理。
控制变量取值
以下是一个简单的例子,说明如何在 Python 中使用 argparse:
import argparse
parser = argparse.ArgumentParser(description='PyTorch Example')
# 添加参数
parser.add_argument('--batch-size', type=int, default=64, metavar='N',
help='input batch size for training (default: 64)')
parser.add_argument('--epochs', type=int, default=10, metavar='N',
help='number of epochs to train (default: 10)')
parser.add_argument('--lr', type=float, default=0.01, metavar='LR',
help='learning rate (default: 0.01)')
parser.add_argument('--momentum', type=float, default=0.5, metavar='M',
help='SGD momentum (default: 0.5)')
parser.add_argument('--no-cuda', action='store_true', default=False,
help='disables CUDA training')
args = parser.parse_args()
print(args.batch_size) # 输出 batch size 参数
print(args.epochs) # 输出 epochs 参数
print(args.lr) # 输出 learning rate 参数
print(args.momentum) # 输出 momentum 参数
print(args.no_cuda) # 输出是否使用 CUDA 参数
在上面的代码中,我们首先导入 argparse 模块,并创建了一个 argparse.ArgumentParser
的实例。我们使用 add_argument 方法添加了一些参数。例如,--batch-size
表示要输入的批次大小,--epochs
表示要训练的 epoch
数量等等。
接下来,我们使用 parse_args()
方法解析了命令行输入的参数,并将它们存储在 args
变量中。然后,我们可以通过访问 args
的属性来获得特定的参数值。
在运行上述代码时,可以使用如下命令来指定参数:
python my_program.py --batch-size 128 --epochs 20 --lr 0.1 --momentum 0.9 --no-cuda
这将使用 batch size 为 128
、训练 epoch 数为 20
、学习率为 0.1
、SGD momentum 为 0.9
,以及禁用 CUDA
的参数运行代码。
调用
假设有两个Python文件A.py和B.py,需要在A.py中设置参数,然后在B.py中使用这些参数。以下是一个示例:
A.py:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--learning_rate', type=float, default=0.001, help='learning rate for optimizer')
parser.add_argument('--batch_size', type=int, default=32, help='batch size for training')
parser.add_argument('--num_epochs', type=int, default=10, help='number of epochs for training')
args = parser.parse_args()
# 将args作为模块的变量导入
import sys
sys.modules[__name__].__dict__.update(args.__dict__)
B.py:
from A import *
print('Learning rate:', learning_rate)
print('Batch size:', batch_size)
print('Number of epochs:', num_epochs)
在上面的例子中,A.py
中使用argparse
设置了三个参数,然后将这些参数作为模块的变量导入。在B.py
中,直接从A模块
中导入这些变量并使用它们。
要运行这些文件,只需在命令行中运行python A.py
,然后在B.py
中导入并使用这些参数。
请注意,如果需要在其他文件中使用这些参数,则需要先导入A.py
,然后才能使用这些参数。否则,将无法找到这些变量。