手把手教你用Python设计一个简单的命令行界面_python做一个动态显示命令行

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰。今天,我们就来教大家如何设计功能完整的 Python 命令行界面。

对 Python 开发者来说用的最多的界面恐怕还是命令行。就拿我参与的机器学习项目来说,训练模型和评估算法的精确度都是通过在命令行界面运行脚本来完成的。

所以调用一个 Python 脚本的时候我们希望这段脚本有一个尽量简洁方便调用的接口。尤其是团队中有多名开发者的时候这一点对提升团队的工作效率很重要。

更多Python视频、源码、资料加群683380553免费获取

要让一段脚本方便调用总的来说有四个原则需要遵守:

  1. 提供默认参数值
  2. 处理调用出错的情况,比如缺少参数、参数类型错误或者找不到文件等
  3. 在文档中说明各个参数和选项的用法
  4. 如果执行时间较长应该提供进度条

一个简单的例子

下面我们先通过一个简单的例子来谈谈这四个原则的具体应用。例子中给出的脚本的功能是使用凯撒码变换对文本进行加密和解密。

Caesar cipher:一种简单的消息编码方式。在密码学中,凯撒密码,移位密码是最简单和最广为人知的加密技术之一。

比如说我们想让用户通过命令行参数来选择调用的方式是加密还是解密文本,而且用户要从命令行传入下面 encrypt 函数中的密匙参数 key。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

首先我们得在程序中拿到命令行参数。我在网上搜“ python 命令行参数”出来的第一个结果说让我用 sys.argv ,那我们就来试试看它好不好用。

初级:笨办法

其实 sys.argv 只是一个 list ,这个 list 的内容是用户调用脚本时所输入的所有参数(其中也包括脚本的文件名)。

如果我像下面这样调用加解密的脚本 caesar_script.py 的话:

> python caesar_script.py --key 23 --decrypt my secret message
pb vhfuhw phvvdjh

sys.argv 这个 list 的值就是:

 ['caesar_script.py', '--key', '23', '--decrypt', 'my', 'secret', 'message'] 

所以我们现在要遍历这个 list 来找其中是否包括了“ –key ”或者“ -k ”,这样我们就能找到密匙“ 23 ”。再找到“ –decrypt ”就能知道用户是想要解密一段文本了(其实解密就是用密匙的相反数再加密一次)。

完成后的代码如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这段代码基本上遵守了我们提到的四个原则:

  1. key 和 加密模式都设置了缺省参数
  2. 脚本可以处理像没有文本或者缺少参数这样比较基本的错误
  3. 用户没有给参数或者有错的话会显示使用帮助
> python caesar_script_using_sys_argv.py
Usage: python caesar.py [ --key <key> ] [ --encrypt|decrypt ] <text>

然而不算加密函数光处理参数我们就已经写了 39 行而且写得一点也不优雅。我有胆说肯定还有更好的办法来读命令行参数。

中级:argparse

Python 标准库里面提供了一个读取命令行参数的库——argparse 。我们来看看如果用 argparse 代码怎么写:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样写也符合四项指导原则,而且对参数的说明和错误处理都优于使用 sys.argv 的笨办法:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不过我个人还是觉得代码里第 7 行到第 13 行定义参数的部分写得很啰嗦,而且我觉得参数应该使用声明式的方法来定义。

高级: click

还有一个叫 click 的库能实现我们想要的这些。它的基本功能和 argparse 是一样的,但写出来的代码更优雅。

使用 click 改写我们的加解密脚本之后是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们需要的参数和选项都用装饰器来声明,这样就可以在 caesar 函数里直接使用了。

上面的代码里有几点需要说明:

  1. nargs 参数是说这个参数的长度是几个词。默认值是 1 不过用引号引起来的句子也只算一个词。这里我们设为 -1 是指不限制长度。
  2. –decrypt/–encrypt 这样加一个斜杠的写法用来指明互斥的选项,它的功能和 argparse 中的 add_mutually_exclusive_group 函数类似。
  3. click.echo 是 click 提供的一个 print 功能,与 Python 2 和 3 都兼容,而且有颜色高亮功能。

添加隐私功能

我们写的是一个对文本加解密的脚本,但用户却直接把要加密的文本打出来了,这样有别人用这个命令行的话按几下上方向键就能看到我们的用户加密了什么东西,这是在是有点荒唐。

我们可以选择把用户要加密的文本隐藏起来,或者是从文件里读文本。这两种方法都能解决我们的问题,但选择权应该留给用户。

同理对于加解密的结果我们也让用户选择是直接在命令行输出还是保存成一个文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

pic_center)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常好的问题!以下是一个简单手把手教程,介绍如何使用Python实现人脸识别。 1. 安装必要的库 首先,您需要安装OpenCV和face_recognition库。您可以使用以下命令在终端上安装它们: ``` pip install opencv-python pip install face_recognition ``` 2. 准备样本图像 您需要准备一些人脸图像,以便训练和测试您的模型。您可以从互联网上下载一些图像,或者使用您自己的照片。将这些图像保存在一个文件夹中,文件夹的名称应该是人物的名字。 3. 训练模型 接下来,您需要训练一个模型来识别人脸。您可以使用face_recognition库中的train函数来训练模型。以下是一个简单的代码示例: ``` import os import face_recognition # 从文件夹中加载人脸图像并进行训练 def train_faces(directory): known_faces = [] known_names = [] for filename in os.listdir(directory): image = face_recognition.load_image_file(directory + "/" + filename) face_encoding = face_recognition.face_encodings(image)[0] known_faces.append(face_encoding) known_names.append(filename.split(".")[0]) return known_faces, known_names # 训练模型 faces_dir = "./faces" known_faces, known_names = train_faces(faces_dir) ``` 该函数将从指定的文件夹中加载所有人脸图像,并使用face_recognition库的face_encodings函数将每个图像编码为一个128维向量。然后,它将这些向量存储在known_faces列表中,并将每个人物的名称存储在known_names列表中。 4. 进行人脸识别 现在,您已经训练好了模型,可以开始进行人脸识别了。以下是一个简单的代码示例: ``` import cv2 import face_recognition # 打开摄像头 video_capture = cv2.VideoCapture(0) # 对每一帧进行处理 while True: # 获取当前帧 ret, frame = video_capture.read() # 将当前帧转换为RGB格式 rgb_frame = frame[:, :, ::-1] # 在当前帧中查找所有人脸位置 face_locations = face_recognition.face_locations(rgb_frame) # 对每个人脸进行编码 face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) # 对于每个编码,查找最佳匹配 for face_encoding in face_encodings: matches = face_recognition.compare_faces(known_faces, face_encoding) name = "Unknown" # 如果有一个匹配,则使用匹配的名称 if True in matches: first_match_index = matches.index(True) name = known_names[first_match_index] # 在人脸周围绘制一个矩形和名称 top, right, bottom, left = face_location cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) cv2.putText(frame, name, (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2) # 显示当前帧 cv2.imshow('Video', frame) # 按'q'键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 关闭摄像头和窗口 video_capture.release() cv2.destroyAllWindows() ``` 该代码将打开计算机上的摄像头,并对每一帧进行处理。它将使用face_recognition库的face_locations函数查找每个帧中的所有人脸位置,然后使用face_encodings函数对每个人脸进行编码。接下来,它将对每个编码进行比较,并使用最佳匹配的名称来标记每个人脸。最后,它将在每个人脸周围绘制一个矩形和名称,并在屏幕上显示当前帧。 这就是用Python实现人脸识别的基本步骤。当然,这只是一个简单的示例,您可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值