python半径为2.11的圆球的体积_python 学习笔记 11 -- 使用参数使你的程序变得更性感...
当然,在之前的系列中,我已介绍如何给 Python 脚本传参,当然,今天不会继续介绍这么无聊的东东。首先使用 python 的sys.argv 传参的话,就固定了参数的个数、顺序以及格式,这么死的规定如何性感?
I have a dream , to make my code much sexer ! 今天我们简单介绍一下如何更加随性的给 python 脚本传参。效果如下:
long@zhouyl:/tmp$ python arg.py -h
NAME:
project with user set arguments
SYNOPSIS:
[python] arg.py [OPTION]...
DESCRIPTION:
-h, --Help Print this help (work alone, won't work while be mixed with other argu)
-a, --testa a value
-b, --testb b value
AUTHOR:
Zhou Yunlong
long@zhouyl:/tmp$ python arg.py -a 1 -b=2
Argument a values: 1
Argument b values: 2
long@zhouyl:/tmp$ python arg.py -a 1 -b='/home/long'
Argument a values: 1
Argument b values: /home/long
我们可以看到,有了很Linux 的help 帮助信息 ,还可以随便传递参数。是不是很好玩,下面简单介绍:
一、 如何获取不定个数的参数
当然,万变不离其宗,偶们还是得老老实实的靠 sys.argv 来传递参数,但是我们之前介绍的博文中是这样传递参数的:
(script, first_argu, second_argu)= sys.argv
这样固然简单易用,但是问题就是参数的数量、顺序、格式都根据脚本中接收代码确定下来,没有易用性。
那么我们如何解决带不定数量的参数呢? 我使用的方法很简单, 不使用固定数量的变量来接收参数,来一个哥接一个,全给你放到列表中:
def add_sys_argv():
arg_list = []
for i in range(1, len(sys.argv)):
arg_list.append(sys.argv[i])
return arg_list
那么,这个函数获取并返回的列表中存放的都是用户传递进来的参数呢。所以,一切就变得更加简单了。
二、 查找参数
很多的Linux 命令中都可以不固定参数的顺序,且一般都是遵循“ -[OPTION] VALUE ” 的顺序,这样传进来的参数,哇哦,好判断,我只要使用 " if '-a' in argu_list " 即可。
但是我想要它更性感,不知你有没有使用过 “ -[OPTION]=VALUE ”这样的赋值, 我感觉这样的赋值也挺好,不会弄乱,看起来也很方便。而对于参数列表中接收到的 "-a=123"参数项,只使用 " if '-a' in argu_list " 就不能找到咯,我们需要使用 字符串的 find 方法。
查找函数很简单:
def check_arument_in(argu, arg_list):
for i in range(0, len(arg_list)):
if arg_list[i].find(argu) != -1 :
return True
return False
对于列表中的每一项进行find ,如果找到返回 True ,如果整个列表都找不到则返回 False。
对于参数的值的获取,因为我想要“ -[OPTION] VALUE ” 和“ -[OPTION]=VALUE ”在这两种赋值方法都可以使用,所以使用check_arument_in 查找到后还需要对此项进行查找有没有 '=' ,如果有就在此项中得到赋值,如果没有'=' 赋值就是列表的下一个值:
def get_argument_value(argu, arg_list):
for i in range(0, len(arg_list)):
if arg_list[i].find(argu) != -1 :
if arg_list[i].find('=') != -1 :
a_argu = arg_list[i].split("=")[1]
if len(a_argu) == 0:
return 0
else:
return a_argu
elif (i+1) <= len(arg_list):
a_argu = arg_list[i+1]
return a_argu
else:
print "it seems that argument is error"
return 0
三、 对参数做出相应处理
进入脚本之后我们首先使用一个函数对参数进行判断:
def get_user_argu():
sys_arg_list = add_sys_argv()
if '-h' in sys_arg_list and len(sys_arg_list) == 1: # 如果参数只有一个,且是"-h" 的话,调用打印help 信息的函数
print_usage()
if check_arument_in('-a', sys_arg_list): # 此后就需要对你关心的参数项进行查找并获取,如果有则做相应的操作。
a_argu = get_argument_value('-a', sys_arg_list)
print "Argument a values: %s" % a_argu
if check_arument_in('-b', sys_arg_list):
b_argu = get_argument_value('-b', sys_arg_list)
print "Argument b values: %s" % b_argu
对于打印help 信息的函数就更简单了:
def print_usage():
print """NAME:
project with user set arguments \n
SYNOPSIS:
[python] arg.py [OPTION]... \n
DESCRIPTION:
-h, --Help Print this help (work alone, won't work while be mixed with other argu)
-a, --testa a value
-b, --testb b value
AUTHOR:
Zhou Yunlong
"""
sys.exit()
四、 完整程序赏析
整个示例 arg.py 很简单:
#!/usr/bin/python
import sys
def add_sys_argv():
leng = len(sys.argv)
arg_list = []
for i in range(1, leng):
arg_list.append(sys.argv[i])
return arg_list
def check_arument_in(argu, arg_list):
for i in range(0, len(arg_list)):
if arg_list[i].find(argu) != -1 :
return True
return False
#print arg_list
def get_argument_value(argu, arg_list):
for i in range(0, len(arg_list)):
if arg_list[i].find(argu) != -1 :
if arg_list[i].find('=') != -1 :
a_argu = arg_list[i].split("=")[1]
if len(a_argu) == 0:
return 0
else:
return a_argu
elif (i+1) <= len(arg_list):
a_argu = arg_list[i+1]
return a_argu
else:
print "it seems that argument is error"
return 0
def print_usage():
print """NAME:
project with user set arguments \n
SYNOPSIS:
[python] arg.py [OPTION]... \n
DESCRIPTION:
-h, --Help Print this help (work alone, won't work while be mixed with other argu)
-a, --testa a value
-b, --testb b value
AUTHOR:
Zhou Yunlong
"""
sys.exit()
def get_user_argu():
sys_arg_list = add_sys_argv()
print sys_arg_list
if '-h' in sys_arg_list and len(sys_arg_list) == 1:
print_usage()
if check_arument_in('-a', sys_arg_list):
a_argu = get_argument_value('-a', sys_arg_list)
print "Argument a values: %s" % a_argu
if check_arument_in('-b', sys_arg_list):
b_argu = get_argument_value('-b', sys_arg_list)
print "Argument b values: %s" % b_argu
get_user_argu()
运行结果在上面已经展示过了,但是因为示例过于简单,还未对参数的内容进行判断,所以可能会出现这样的错误:
long@zhouyl:/tmp$ python arg.py -a -b='/home/long'
Argument a values: -b=/home/long
所以,如果你想要你的程序更加完整以及安全,就需要对参数进行更多的判断以及审核
五、 关于大型程序的参数处理
对于一些大型程序中使用的参数处理并不是上面我这样,而且很好玩,很适宜我们学习。
这里我们以GCC的 gcov 为例:
static int
process_args (int argc, char **argv)
{
int opt;
while ((opt = getopt_long (argc, argv, "abcfiIhlno:puv", options, NULL)) != -1)
{
switch (opt)
{
case 'a':
flag_all_blocks = 1;
break;
case 'b':
flag_branches = 1;
break;
...
我们可以看到,GCOV 中对于接收到的参数进行switch 判断,得到参数后也只是对一个flag变量进行赋值,而在程序正常处理时,则是这样:
if (flag_all_blocks)
{
block_t *block;
arc_t *arc;
int ix, jx;
for (ix = jx = 0, block = line->u.blocks; block;
block = block->chain)
...
flag_all_blocks 参数在程序中定义为0,只有用户带了 '-a' 参数,才会在上面的switch ...case 中将其变为1, 于是在程序运行到与之相关的部分时,只需要对 flag_all_blocks 进行判断就可以知道用户有没有携带'-a' 参数,如果有则做相应处理。
==============
对于本文中的方法实属自己没事瞎玩,如果你有更好地方法,还请在留言中赐教。
python半径为2.11的圆球的体积_python 学习笔记 11 -- 使用参数使你的程序变得更性感...相关推荐
- python半径为2.11的圆球的体积_Python科学计算神器之Numpy-2
这是Numpy学习系列第二部分,第一部分见Numpy-1 4. Array对象的存取 4.1 Array的Indexing,Slicing,Iterating 该部分集中在Numpy的array数据的 ...
- python语言的33个保留字的基本含义_Python学习笔记——Python的33个保留字及其意义,python,pythone33,含义...
Python学习笔记--Python的33个保留字及其意义,python,pythone33,含义 发表时间:2020-03-27 笔记走起 正文 序号 保留字 含义 1 and 用于表达式运算,逻辑 ...
- python半径为2.11的圆球的体积_python数据分析第二版(11),利用,Python,进行,复现,十一...
第12章 pandas高级应用 12.1 分类数据 有一些数据会包含重复的不同值的小集合的情况.可以用unique和value_counts进行分类提取. import numpy as np imp ...
- python函数参数学习_python学习笔记-11.函数参数和返回值进阶
1. 函数参数和返回值的作用 函数根据有没有参数以及有没有返回值,可以相互组合,共有4种形式: 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值 定义函数时,是否接收参数,或者是 ...
- python条件表达式连起来写一段话_python学习笔记十三条件表达式应用
彩票游戏: 当号码相等的时候越多,奖金就越多. 而彩票的中奖号码是随机的. 模拟彩票的工作原理,随机产生2个数,然后用户输入两个数字,通过数字的匹配来判断用户是否中奖. 设定以下规则: 当两个数完全相 ...
- 编写python程序半径为2.11的圆球的体积_医学生理学(山东大学)知到智慧树题目答案...
我们常吃的花生米是种子 [单选题]动机说出自(),他认为回忆痛苦的经验将使人回到不愉快的过去,为避免痛苦感受在记忆中的重现,人们常常对这些感受和经验加以抑制,使之不出现在意识中,由此引起遗忘. A. ...
- Python学习笔记11:函数修饰符
Python学习笔记11:函数修饰符 Python有很多有趣的特性,其中函数修饰符就是一个. 我们在之前的那个web应用示例中用过如下写法: @web.route('/log') @符号后边的,就是一 ...
- python图形设置_python学习笔记——基本图形绘制
1.python蟒蛇python蟒蛇代码 #PythonDraw.py import turtle turtle.setup(650,350,200,200)# 设置画布的长.宽.起点 turtle. ...
- 点云学习笔记11——VoxelNet算法+代码运行
点云学习笔记11--VoxelNet算法+代码运行 一.算法分析 摘要 介绍 相关工作 1.2. 贡献 2.VoxelNet 2.1.特征学习网络 2.1.1 特征学习网络 二.代码复现 2.1.环境 ...
最新文章
- mysql建立联合索引,mysql建立唯一键,mysql如何解决重复记录联合索引
- linux服务器lvs,Linux的企业-LVS(Linux虚拟服务器)及FULLNAT设置
- bartlett方差齐性检验_R语言实用教程-数据正态性以及方差齐性检验
- Codechef TRIPS Children Trips (分块、倍增)
- 12行代码AC——UVa 151 - Power Crisis(约瑟夫环)
- 固态硬盘 linux 文件系统,SSD是否需要使用特别的文件系统?
- 环境变量_Jenkins流水线环境变量权威指南
- 初学c#读书笔记(一)--c#和.NET Framework
- LeetCode —— 365. 水壶问题(Python3)
- python交互界面实例_Python面向对象编程扑克牌发牌程序,另含大量Python代码!
- 秒懂文件路径 ‘/‘ , ‘./‘ , ‘../‘ 的区别
- PTA平台之温度转换
- matlab erf erfi,误差函数
- 三星BESPOKE家电系列海外发布会看点一览,定制化设计成未来家居首选
- 使用vuex实现一个简单的小应用
- 取消UL和OL符号以及padding和margin后恢复默认值的CSS
- PyQt4设计UI界面并添加简单功能【python+pyqt4+opencv】
- cocos2dx-精灵的移动跳跃
- halcon中怎么降低图像亮度_图像亮度调整
- 项目新增commitLint 和 husky 步骤
热门文章
- spring interceptor 拦截方法,判断用户是否存在
- WIFI加密技术介绍
- 常用的C#方法【Format.CS】
- netcore 实现一个简单的Grpc 服务端和客户端
- 错误/异常:java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind;的解决方法...
- 深入理解Plasma(一)Plasma 框架
- 洛谷 3833 SHOI 2012 魔法树
- Ubuntu Server 安装桌面untiy
- .net IO异步和Producer/Consumer队列实现一分钟n次http请求
- ES6: 参数默认值及中间域