【Python基础函数笔记】parser

这篇博客介绍了Python中的argparse模块,用于处理命令行参数和选项。通过示例展示了如何定义和解析命令行参数,包括添加不同类型的参数、启用帮助选项等。博主分享了个人的编程经历,并提供了一份全面的Python学习资料,涵盖前端开发的大部分知识点,旨在帮助开发者系统地提升技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

parser.add_argument('-s', '--seed', type=int, default=42)
parser.add_argument('-m', '--milestones', nargs='+', required=True, default=15)  # -m 是一个短选项参数,后面跟着一系列值 15 30 45 60 75 90,表示将这些值作为参数传递给 -m。
parser.add_argument('-rd', '--result_directory', type=str, default="FGNET_experiments/subject")
parser.add_argument('-pi', '--pred_image', type=str, default=None)
parser.add_argument('-pm', '--pred_model', type=str, default=None)
parser.add_argument('-K', '--K', type=int, default=6)
parser.add_argument('--loss', type=str, default='mrloss', help='mean_softmax/residual_softmax/softmax/mrloss/mvloss')
parser.add_argument('--SGD', action='store_true')
parser.add_argument('--Adam', action='store_true')
parser.add_argument('--gpu', type=int, default=2, help='GPU to use')
return parser.parse_args()

参数详解 



> 
> **`name or flags`**:参数的名称或选项。可以是一个字符串,例如 `'--batch_size'` 或 `'-b'`,也可以是一个字符串列表,例如 `['-b', '--batch_size']`,其中 `--batch_size` 是长选项,`-b` 是短选项。
> 
> 
> **type**:表示输入参数的类型,可以是int,str,float
> 
> 
> **default**:表示参数默认的值
> 
> 
> **help**: 帮助信息,例如`help='VGG/ResNet'` 提供了关于该参数的帮助信息,当用户使用 `-h` 或 `--help` 选项时,该信息将显示在帮助文档中。
> 
> 
> **nargs**:用于定义一个选项参数应该消耗的命令行参数数量。它可以接受以下不同的取值:
> 
> 
> * `'+'`:表示选项参数可以**接受一个或多个参数值**。多个参数值将被解析为一个列表。例如,`-m 15 30 45` 将解析为 `args.milestones = [15, 30, 45]`。
> * `'*'`:表示选项参数可以**接受零个或多个参数值**。多个参数值将被解析为一个列表。例如,`-m 15 30 45` 将解析为 `args.milestones = [15, 30, 45]`,而不提供 `-m` 参数将解析为 `args.milestones = []`。
> * `int`:表示选项参数应该消耗**固定数量的参数值**。例如,`nargs=2` 表示选项参数需要接受两个参数值。例如,`-m 15 30` 将解析为 `args.milestones = [15, 30]`。
> * `argparse.REMAINDER`:表示选项参数应该消耗剩余的命令行参数,将其解析为一个列表。例如,`-m 15 30 45 60 75 90` 将解析为 `args.milestones = [15, 30, 45, 60, 75, 90]`。
> 
> 
> **`required`**:指定该参数是否是必需的。默认为 `False`,即可选参数。如果将其设置为 `True`,则在命令行中必须提供该参数,否则将引发错误。
> 
> 
> **`choices`**:指定参数的可选值列表。如果设置了该参数,那么命令行中提供的值必须是列表中的一个,否则将引发错误。
> 
> 
> **`action`**:指定参数的动作。常见的动作包括 `'store'`(默认动作,将参数值存储为属性)、`'store_true'`(将参数解析为 `True`)、`'store_false'`(将参数解析为 `False`)、`'append'`(将多个参数值存储为列表)等。
> 
> 
> 


## 2.看下如何运用--heip


help.py



import argparse

def get_args():
parser = argparse.ArgumentParser()
parser.add_argument(‘–net’, type=str, default=‘ResNet’, help=‘VGG/ResNet’)

return parser.parse_args()

def main():
args = get_args()

# 获取命令行参数的值
net = args.net

# 在这里使用参数进行相应的操作
print(f"net: {net}")

if name == ‘main’:
main()


使用shell命令行查看帮助信息,一般代码是自己写,不会看的哈!



python filename.py --help
python filename.py -h


![](https://img-blog.csdnimg.cn/a56762909fa44c71a93ac50fb9c99095.png)



## 3.看下action四个参数的区别


 help.py文件



import argparse

def main():
parser = argparse.ArgumentParser()
parser.add_argument(‘–input’, action=‘store’, type=str, help=‘Input file path’)
parser.add_argument(‘–verbose’, action=‘store_true’, help=‘Enable verbose mode’)
parser.add_argument(‘–output’, action=‘append’, help=‘Output file path’)

args = parser.parse_args()

# 使用解析后的参数进行后续处理
if args.input:
    print(f'Input file: {args.input}')

if args.verbose:
    print('Verbose mode enabled')

if args.output:
    print(f'Output files: {args.output}')

if name == ‘main’:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

img
python根据需求完成一个TXT解析器的简单开发 一 修改说明: 需求一: 一开始说要解析UECapabilityInfo 消息里的supportedBandCombination-r10 这个IE里的CA组合转化成易阅读的表现形式. 我以为一组CA组合就是一组: bandEUTRA-r10 ca-BandwidthClassUL-r10 ca-BandwidthClassDL-r10 supportedMIMO-CapabilityDL-r10 功能实现: 有效信息筛选:于是就用循环把UECapabilityInformation的数据里每一行作为一个元素放到list里面 然后用bandEUTRA-r10作为一组CA的识别信息、在筛选出同组ca-BandwidthClassUL-r10、ca-BandwidthClassDL-r10、supportedMIMO-CapabilityDL-r10的信息,添加保存到字符串中,然后再把字符串作为元素添加到list中去。最后遍历list的元素写入目标文件 需求二: 然后收到反馈CA组合的理解是错误的。一组CA组合应该是以大括号作为识别的,里面可能包含多组: bandEUTRA-r10: ca-BandwidthClassUL-r10 ca-BandwidthClassDL-r10 supportedMIMO-CapabilityDL-r10 CA组合识别原理:在查看UECapabilityInformation内的CA组合后 发现CA组合内第一个 bandEUTRA-r10因为比其他bandEUTRA-r10多了一层的CA组合的大括号,所以如果给每一行增加索引的话就会发现除了第一个bandEUTRA-r10,其他bandEUTRA-r10到上一个supportedMIMO-CapabilityDL-r10的距离都是一样的,为了减少复杂度,我删除了所有’{’,这样所有除了所有CA组合第一个bandEUTRA-r10往上第四行是’}’其他bandEUTRA-r10的往上第四行都是supportedMIMO-CapabilityDL-r10 功能实现: 添加索引:便利时用了for enumerate()循环,这样便利时可以在循环时,自动为每个元素生成索引 CA组合识别:在识别到bandEUTRA-r10时,增加一个判断if datalist1[index-4].startswith(),如果bandEUTRA-r10的往上第四行是supportedMIMO-CapabilityDL-r10说明同组CA未结束,把筛选的有效信息强制类型转换后添加在上个元素末尾,反之则说明是个新的CA组合,往列表里添加一个新的元素。 需求三: 之后收到反馈CA组合虽然识别了,但是排序不行,需要按照CA组合支持的band进行排序 功能实现: 排序:于是我在识别完CA组合后,增加了一个循环和count(),用CA组合里的’-’给它们归类 比如1AA,11A,21AA是一类;1A-1A,2A-1AA,3A-1A是一类 在用一个中间变量保存开头的band的数字,一个类中把开头支持band的数字字母相同的CA组合归为一行 比如1A-21A,1A-22A一类1AA-2AA 1AA-3AA为一类 需求四: 之后收到反馈,CA组合分类不能只按照开头比较分类,不然一但数据多了会对查阅带来极大不便,应该按照每组CA组合中bandEUTRA-r10的值进行判断,比如1AA-2AA,1A-2AA和1AA-2A应该归在同一行 实现原理:首先我想的是按位比较数字,但是因为字母的数量不稳定,数字的位置不一定对应,然后我就想把数字全部提取出来作为索引,在相应的索引后面添加同组元素,用dict来实现排序。难点就在于从字符串中提取数字。后来在python的正则表达式中找到相关的处理函数compile()(设置匹配对象类型)和findall()(找到所有匹配对象并以list返回)。 功能实现: 第二次排序:在上次的排序中我保留了分类和从小到大的排序。方便提取索引时,索引也是从小到大。每遍历一个元素(CA组合有效信息),就compile()和findall(),从该元素中提取数字组合(在compile()的参数中添加()就能够使提取的内容成为一组数据),然后通过dict自带函数setdefault()添加索引,并可以设置索引值为list类型(dict类型的索引的值不可变,但如果类型为list,list的内容可以进行改动),避免重复索引,在本次遍历中完成将元素添加到索引值对应的list中去 需求五: 之后对程序进行测试,在测试test2时发现layers增加了fourlayers类型后,用来代表layers的数字2和4会影响分类结果。比如1AA(2)-1AA(2)和1A(4)-1A(2)会被归为两类。 test1:当CA组合的格式为xx-xx-xx-xx-xx(最长可识别为五位元素的组合,再长就需要修改代码) test2:当CA组合包含fourLayers test3:当CA组合缺失某种格式比如xx-xx时发现layers增加了fourlayers 功能实现: : 解除layers对排序的影响:用II 和 IV替代2,4来表示layers,测试后不影响阅读与分类 二、整体程序架构: 1.通过循环和自带的startswith()先将每组CA组合的有效信息识别 2.通过sorted()函数将所有CA组合从小到大排列 3.通过count()函数将所有CA组合根据格式不同分类 4.通过循环和正则表达式的split()对所有CAlist数据进行处理(用split处理只是防止出现不必要的错误) 5.通过循环和正则表达式compile()和findall()识别所有CA组合中数字,并将同一组合中的数字合为一个元素(在同一循环,用这个数字的元素作为一个dict的索引),用dict自带的setdefault()进行Key的添加顺便设置Key的值为list,避免Key重复,在用append把当前Key的字符串,添加到Key对应值的list中去 6.最后对dict整体遍历,将每一个Key的值输出到文本中去。
### Python爬虫学习教程与资源 对于零基础入门Python爬虫,建议遵循一个结构化的学习路径来逐步掌握所需技能。这不仅有助于理解基础知识,还能为后续深入研究打下坚实的基础[^1]。 #### 学习路线概述 初学者可以从以下几个方面入手: - **编程基础** 掌握Python基本语法、数据类型、控制流语句以及函数定义等内容。这是编写任何程序的前提条件。 - **网络协议** 理解HTTP/HTTPS的工作原理及其请求响应模式;熟悉URL组成规则和参数传递方式等知识点。 - **HTML/CSS解析** 学会读取网页源代码中的标签含义,并能够利用BeautifulSoup库提取特定信息片段。 - **抓取框架Scrapy** Scrapy是一个强大的异步处理工具包,专为Web Scraping设计。通过官方文档了解其安装配置过程并尝试构建简单的项目实例。 - **反爬机制应对策略** 随着网站安全措施日益严格,在合法合规的前提下探索绕过验证码识别、IP封禁等问题的方法论和技术手段。 ```python import requests from bs4 import BeautifulSoup url = 'https://example.com' response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") title = soup.find('h1').text.strip() print(f"The title of the page is {title}") ``` 此段代码展示了如何使用`requests`发送GET请求获取目标页面内容,并借助`BeautifulSoup`完成DOM树遍历操作从而定位到标题元素节点最终打印出来自于该位置的文字串值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值