0
点赞
收藏
分享

微信扫一扫

PythonNote039---argparse处理布尔型参数


Intro

    argparse无法识别布尔型参数,参数传进来时,默认为字符串。字符串强制转布尔型时为True

布尔型

  • 在数值上下文环境中,True 被当作 1,False 被当作 0
  • 其他类型值转换 bool 值时除了 ‘’、“”、‘’‘’‘’、“”“”“”、0、()、[]、{}、None、0.0、0L、0.0+0.0j、False 为 False 外,其他都为 True

print(f'int(True)={int(True)};int(False)={int(False)}')
print(f'True+1={True+1};False+1={False+1}')

int(True)=1;int(False)=0
True+1=2;False+1=1

print(f'bool("")={bool("")}')

bool("")=False

argparse中的布尔型

参数可以设置为布尔型,但是传参时默认为字符串,先验证该逻辑

import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("--isOverwrite", help="Overwrite", type=bool, required=False)
parser.add_argument("--isOverwrite1", action='store_true',help="Overwrite",required=False)
parser.add_argument("--isOverwrite2",help="Overwrite", type=lambda x: x.lower() == 'true', required=False)
args = parser.parse_args()
print(f'args.isOverwrite={args.isOverwrite}')
print(f'args.isOverwrite1={args.isOverwrite1}')
print(f'args.isOverwrite2={args.isOverwrite2}')

!python test.py --isOverwrite False

args.isOverwrite=True

有两种解法:

  • action=‘store_true’,传入参数为True,不传为False
  • 自定义函数type=lambda x: x.lower() == ‘true’,做判断

法1

parser.add_argument("--isOverwrite1", action='store_true',help="Overwrite",required=False)

!python test.py

args.isOverwrite=None
args.isOverwrite1=False

!python test.py --isOverwrite1

args.isOverwrite=None
args.isOverwrite1=True

该方法可以使用,但是不是很方便,比如调试代码时,希望–参数名保留,只改参数值,省去频繁打参数名的步骤

法2

parser.add_argument("--isOverwrite2",help="Overwrite", type=lambda x: x.lower() == 'true', required=False)

!python test.py --isOverwrite2 False

args.isOverwrite=None
args.isOverwrite1=False
args.isOverwrite2=False

!python test.py --isOverwrite2 True

args.isOverwrite=None
args.isOverwrite1=False
args.isOverwrite2=True

                                2022-11-26 阴 于南京市江宁区


举报

相关推荐

0 条评论