python之定义参数模块argparse(二)高级使用 --传参为函数的实现
我们在文章python之定义参数模块argparse的基本使用中介绍了argparse模块的基本使用方法
当前传入的参数只能是int、str、float、comlex类型,不能为函数,这有点不方便,但我们通过下面的列子给点启发:
import argparse p = argparse.ArgumentParser(description = 'For function use')
#定义必须输入一个int型参数
p.add_argument('Intergers',help = 'one or more intergers is need',metavar = 'N',type = int)
#定义可选参数-s,默认值为为一个lambda函数
p.add_argument('-s',help = 'if no --square,need more ',action = 'store_const',default = lambda x:x**x,const = lambda x:x*x)
args = p.parse_args()
print(args.s(args.Intergers))
先保存上述代码为arg.py,然后在命令行中分别执行python arg.py 3和python arg.py -s 3,执行结果如下所示:
D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py 3
27 D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -s 3
9
我们可以看到没有报错,执行结果分别为参数的乘积(平方)和参数的参数次方,也就是args.s是可以接受函数的变量,那扩展下使用python自带函数来演示下:
求最大和最小值:
import argparse p = argparse.ArgumentParser(description = 'For function use')
#定义必须输入至少一个int型参数
p.add_argument('Intergers',help = 'one or more intergers is need',nargs = '+',metavar = 'N',type = int)
#定义可选参数-s,默认为求最小值
p.add_argument('-s',help = 'if no --square,need more ',action = 'store_const',default = min,const = max)
args = p.parse_args()
print(args.s(args.Intergers))
保存为arg.py文件,然后分别执行python arg.py 5 10 1 40和python arg.py -s 5 10 1 40,结果如下:
D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py 5 10 1 40
1 D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -s 5 10 1 40
40
执行结果符合预期,但我们需要的是命令行参数中直接输入函数,实现python arg.py -s min 5 10 1 40这样的形式来求最小值
如何破?我们想到add_argument还有个参数type,虽然只有几种类型,但可以接收自定义类型,如我们定义一个hello的函数作为type看下效果:
import argparse
#定义一个hello函数
def hello(x):
return 'hello ' + x p = argparse.ArgumentParser(description = 'For function use')
#定义一个type类型为hello的可选参数
p.add_argument('-x',help = 'test self-function',type = hello)
args = p.parse_args()
print(args.x)
保存为arg.py文件,然后执行python arg.py -x Yang,可以得到如下结果:
D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -x Yang
hello Yang
输出结果即为hello函数的返回值,也就是说,命令行参数x的值先传递给了hello函数然后参数x才接收了hello函数返回的结果!!!
这样可以使用一个函数返回值来给参数赋值,若这个返回值也是一个函数呢?
之前验证过,参数是可以接收一个函数的,于是我们稍微在上面代码上改动下得到如下代码:
import argparse
#定义一个func参数返回函数给参数x
def func(x):
if x == 'min':
return min
if x =='max':
return max
return error
#定义一个error函数
def error(x):
return '-x parameter only receive min or max!' p = argparse.ArgumentParser(description = 'For function use')
p.add_argument('Intergers',help = 'one or more intergers is need',nargs = '+',metavar = 'N',type = int)
p.add_argument('-x',help = 'test self-function',type = func)
args = p.parse_args()
print(args.x(args.Intergers))
保存为arg.py文件,然后分别执行python arg.py -x min 5 10 1 40、python arg.py -x max 5 10 1 40和python arg.py -x m 5 10 1 40,执行结果如下:
D:\PycharmProjects\untitled\MyTestProject\MyLearn>python ArgParseLearn.py -x min 5 10 1 40
1 D:\PycharmProjects\untitled\MyTestProject\MyLearn>python ArgParseLearn.py -x max 5 10 1 40
40 D:\PycharmProjects\untitled\MyTestProject\MyLearn>python ArgParseLearn.py -x m 5 10 1 40
-x parameter only receive min or max!
我们可以看到,可以得到预期的结果。
这样我们就实现了参数输入函数的目的~若有其他更好的办法,请大家留言交流
python之定义参数模块argparse(二)高级使用 --传参为函数的实现的更多相关文章
- python之定义参数模块argparse(一)基本使用
在shell脚本中,若脚本带参数,则在脚本中使用$1.$2...等引用, 在python中,也可以定义类似的引用参数,可以为必选项也可以可选项. 基本用法如下三种: 1.必选项(位置参数) impor ...
- python命令行解析模块--argparse
python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...
- [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参
[转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...
- Python基础之常用模块(二)
一.sys模块 1.sys.exit() 退出程序,这是正常退出程序,与之前用的break不同的是,break只是退出循环,循环之后的代码还会正常运行 2.sys.argv 会返回一个列表,列表中的 ...
- Python学习 :常用模块(二)
常用模块(二) 四.os模块 os模块是与操作系统交互的一个接口,用于对操作系统进行调用 os.getcwd() # 提供当前工作目录 os.chdir() # 改变当前工作目录 os.curdir( ...
- python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数
1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...
- Python中的Json模块dumps、loads、dump、load函数介绍
Json模块dumps.loads.dump.load函数介绍 1.json.dumps() json.dumps() 用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json ...
- python之路--动态传参,作用域,函数嵌套
一 . 动态传参(重点) * , ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...
- Python 命令行解析模块 —— argparse
argparse是python标准库里面用来处理命令行参数的库,基本使用步骤如下: 1.import argparse 导入模块 2.parser = argparse.ArgumentPars ...
随机推荐
- 《ServerSuperIO Designer IDE使用教程》-4.增加台达PLC驱动及使用教程,从0到1的改变。发布:v4.2.3版本
v4.2.3 更新内容:1.优化数据存储部分,提高效率.2.修复数据库服务停止造成程序异常退出的现象.3.修复本机没有串口造成无法增加设备驱动的情况.4.增加编辑设备和监测点配置信息功能.5.增加台达 ...
- [综述]Deep Compression/Acceleration深度压缩/加速/量化
Survey Recent Advances in Efficient Computation of Deep Convolutional Neural Networks, [arxiv '18] A ...
- windows10下面部署nginx(解决文件名中文乱码问题)
由于开发需要,我们总是需要先在windows环境下面部署项目进行测试,通过之后才会移植到linux系统进行测试部署. 本篇文章会介绍一下windows终端下面部署nginx WEB服务的一些步骤流程, ...
- bower 基础认识
bower 跟 npm 很像 都是管理包的工具 只是 bower 偏向前端 npm 前后都能管理 npm init 后是 生产 package.json 下载的包在node_modules文件下 ...
- UOJ#290. 【ZJOI2017】仙人掌 仙人掌,Tarjan,计数,动态规划,树形dp,递推
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ290.html 题解 真是一道好题! 首先,如果不是仙人掌直接输出 0 . 否则,显然先把环上的边删光. ...
- P1522 牛的旅行 Cow Tours floyed
题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...
- 硬核机器学习干货,手把手教你写KNN!
机器学习相关概念 人工智能.机器学习和深度学习的关系 在探讨算法之前,我们先来谈一谈什么是机器学习.相信大家都听说过AlphaGo:2016年3月,AlphaGo与围棋世界冠军李世石进行围棋人机大战, ...
- 大数据平台Hive数据迁移至阿里云ODPS平台流程与问题记录
一.背景介绍 最近几天,接到公司的一个将当前大数据平台数据全部迁移到阿里云ODPS平台上的任务.而申请的这个ODPS平台是属于政务内网的,因考虑到安全问题当前的大数据平台与阿里云ODPS的网络是不通的 ...
- MyBatis(八)联合查询 级联属性封装结果集
(1)接口中编写方法 public Emp getEmpandDept(); (2)编写Mapper文件 <resultMap type="com.eu.bean.Emp" ...
- Hibernte
什么是CRM?(了解) CRM(customer relationship management)即客户关系管理,是指企业用CRM技术来管理与客户之间的关系.在不同场合下,CRM可能是一个管理学术语, ...