Argparse模块讲解(一)

Argparse是python标准库中的命令行解析模块

还有其他 两个模块可以实现这一功能,getopt(等同于C语言中的getopt())和弃用的optparse。关于这两个模块我没有了解过,有兴趣的同学可以去看一下

https://docs.python.org/2/library/optparse.html#module-optparse

https://docs.python.org/2/library/getopt.html#module-getopt

1. 首先我们先写一个py文件。内容如下:
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

运行:
[外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图上https://传(imblog.csdnimg.cn/FpN6191009214510420.pn)(https://imgh-blog.csdnimg.cn/20191009214510420.png)]
分析:

  • 我们不加任何参数的时候,什么反应也没有
  • 加上参数后我似乎得到了点什么内容,可以发现通过 -h或者–help 获得一些帮助内容。
  • 有没有发现很像linux系统下的 ls命令 可以有参数也可已没有参数,当我们带参数时我们可以获得我们希望的结果
2. 好的我们继续探索

更改我们的py文件内容如下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("helloworld")
args = parser.parse_args()
print (args.helloworld)

我们运行一下:


它似乎并不给我们面子,报错了,告诉我们这里需要一个参数,好吧那我们再来看看帮助信息。
在这里插入图片描述
帮助信息变了,出现了一个定位参数,并且这里告诉我们需要给helloworld一个参数,好吧看来的确是这样的,那我们就满足它的要求。
在这里插入图片描述
咦,出来了,你想要的结果,没错了是你代码里面的内容。

3. 到这里呢我么已经接触了三个方法

parser = argparse.ArgumentParser()         #用来创建一个解析对象
parser.add_argument(“helloworld”)         #给这个解析对象一个参数
args = parser.parse_args()          #获取解析对象参数

        第一个和第三个没什么讲的,我们接着来讲一讲第二个方法add_argument。

写入

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("wine", help = "小二,请给我一壶酒")

parser.add_argument("meat", help = "小二,请给我一碗肉")
args = parser.parse_args()

print ("小二结帐,给你",args.wine+args.meat,"块钱")

运行结果:

在这里插入图片描述
---->现在这里告诉我么需要两个参数,那么帮助文档呢?
在这里插入图片描述
---->帮助文档也变了,哈哈 这是不是在告诉你 我们可以自己给这些参数加一些解释文档呢?对的,只要你通过 help = " " 就可以轻松加一些更利于我们理解的内容了
别高兴太早,我们继续,我们来给他两个参数。
在这里插入图片描述
---->什么情况??出大问题,我代码里明明做的相加,怎么成了34块钱,真相只有一个!它们两个被当作字符串处理了。。。。。。也就是说如果不指定参数类型,argparse默认它是字符串。

结果分析

  • 我们可以通过 add_argument() 方法添加我们想要的参数
  • 我们可以通过 help = " " 形式添加更容易理解的帮助信息
  • 如果不指定参数类型,argparse默认它是字符串。
那么现在我们来告诉他我们想要的参数类型。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("wine", help = "小二,请给我一壶酒",type = int)

parser.add_argument("meat", help = "小二,请给我一碗肉",type = int)
args = parser.parse_args()

print ("小二结帐,给你",args.wine+args.meat,"块钱")

运行结果:
在这里插入图片描述
ok一切正常了。我们继续。

4. 说完 【定位参数】 我们再来说一说【可选参数】
可选参数只需在名字前加 - - 就好了

更改代码为:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--wine", help = "小二,有没有酒?有请给我一壶酒, type = int")

parser.add_argument("--meat", help = "小二,有没有肉?有请给我一碗肉, type = int")
args = parser.parse_args()

if args.wine and not args.meat:
    print("只有酒!")
    print ("小二结帐,给你",args.wine,"块钱")
if args.meat and not args.wine:
    print("只有肉!")
    print ("小二结帐,给你",args.meat,"块钱")
if args.wine and args.meat:
    print("有酒有肉!")
    print ("小二结帐,给你",args.wine+args.meat,"块钱")
if not args.wine  and not args.meat:
    print("不好意思客官,小店今天生意好,都卖完了!你改天再来!")

运行结果:

在这里插入图片描述
分析:

  • 可以看到我们不给任何参数时依然是可以的。
  • 一定要注意的是,如果不指定可选的参数,对应的变量就被设置为None,None是不能和整型比较的
  • 再看帮助文档也变了,变为optional arguments。

我们给他其中一个参数,或者两个参数都给会怎么样呢?

在这里插入图片描述

分析:

  • 我们在给可选参数传参时要指定可选参数的参数名。
  • 可选参数在传参时不受先后顺序的影响。
  • 如果我们没有指定参数类型,依然会被默认为字符串

有的人会说了,每次传参还要打–meat --wine 什么的好麻烦啊!别急,我们稍微改一下代码 你就不用那么麻烦了。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-w","--wine", help = "小二,有没有酒?有请给我一壶酒",type = int)

parser.add_argument("-m","--meat", help = "小二,有没有肉?有请给我一碗肉",type = int)
args = parser.parse_args()

if args.wine and not args.meat:
    print("只有酒!")
    print ("小二结帐,给你",args.wine,"块钱")
if args.meat and not args.wine:
    print("只有肉!")
    print ("小二结帐,给你",args.meat,"块钱")
if args.wine and args.meat:
    print("有酒有肉!")
    print ("小二结帐,给你",args.wine+args.meat,"块钱")
if not args.wine  and not args.meat:
    print("不好意思客官,小店今天生意好,都卖完了!你改天再来!")

运行结果:
在这里插入图片描述
这下是不是轻松多了呢?(自我安慰。。。)有没有注意到,我们在使用时既可以用-w/-m也可以用–wine/–meat ,我们还可一穿插着用!

ok先到这里吧,一下子写完未免太长了!估计会影响到一些人看这篇博客的欲望。哈哈,中场休息!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值