写点什么

Python 中的八个“无代码”特性

  • 2022-02-17
  • 本文字数:3487 字

    阅读完需:约 11 分钟

Python中的八个“无代码”特性

在该篇文章中,作者介绍了一种无需编写任何代码即可使用 Python 内置库的方法。利用好这些方法可以给我们提供很多的便利。希望这篇文章能够给大家带来启发和帮助。


近几年 Python 语言之所以流行,是因为我们可以使用它编写更少的代码来实现复杂的功能。Python 开发者社区非常欢迎那些封装了复杂实现但是对使用者十分友好的工具包。


然而,Python 的简便性不止如此。你能相信我们可以在不写任何代码的情况下使用 Python 吗?在接下来的文章中,我会介绍 8 个无需编写任何代码即可使用 Python 内置功能的例子。

0. Python CLI “-m”参数


我们首先从 Python CLI(命令行界面)开始谈起。虽然我们不必编写代码来使用稍后介绍的功能,但是为了让 Python 知道我们要执行的内容,我们需要使用 Python 命令行来进行操作。只要我们的电脑上安装了 Python 环境,我们就可以在 Python 命令行界面输入python --help显示所有支持的参数。



由于命令输出的内容太长,上图仅显示了部分内容。这里最想强调的是-m mod参数,它会将 Python 模块以脚本的形式运行。因此,如果该模块的实现支持命令行操作,我们就可以在命令行直接使用它。接下来就让我们体验一下:)

1. 服务端口测试


有时候,我们想测试 ip 端口的出站网络流量,通常 telnet 命令是一个不错的选择。在 Windows 平台上默认没有安装 telnet 软件,使用前需要手动安装。如果只是进行简单的测试,未来使用场景也不多,安装它可能是一种资源浪费。但是,如果安装了 Python,那就不必下载安装 telnet,因为 Python 内置了 telnet 对应的模块。我们可以对 Google 搜索网站的 443 端口进行测试。


python -m telnetlib -d 142.250.70.174 443
复制代码



如上图所示,网络流量显示正常,我们甚至收到了来自 Google 空字符的响应。如果我们尝试访问 ip 的随机一个端口,则会抛出错误,如下图所示。


python -m telnetlib -d 142.250.70.174 999
复制代码


2. 本地启动 web 服务


很多 Python 使用者不知道这一点,当第一次听说后会感到惊讶。是的,我们可以使用 Python 启动 web 服务,而无需编写任何代码,只需按如下方式在命令行执行如下命令。


python -m http.server
复制代码



运行后,显示该服务监听了本地的 8000 端口,然后,我们就可以尝试从浏览器进行访问 http://localhost:8000/。



该 web 服务会以根目录的形式展示在命令启动路径下的本地文件系统,换句话说,我们无法访问它的父级目录。


你可能会问,这个功能的使用场景是什么。举一个例子,如果你想跟你的好伙伴们分享你电脑某个目录下的许多文本/PDF/图像文件/子目录文件等,那么使用这个方法就可以非常轻松地进行共享了。



如果你想知道更多关于这个话题的内容,可以参考3 Lines of Python Code to Write A Web Server这篇文章。如果你按照上面的文章实现了一个“低代码”的解决方案,那么就可以向它添加更多的自定义功能了。

3. 验证及格式化输出 JSON 字符串

如果你有一个非常长且未经格式化的 JSON 字符串,那么阅读起来会非常困难。通常,我会使用一些带有 JSON 插件的文本编辑器,比如 Sublime 或者 VS Code,来格式化 JSON 字符串。但是,如果手头没有这些工具,Python 可以临时一用。比如下面会以这个简短的 JSON 字符串进行展示。


echo '{"name": {"first_name":"Chris", "last_name":"Tao"} "age":33}'
复制代码



可以看到,当前操作系统的命令行工具只能按照原字符串的原始格式进行展示。但是,如果借助 Python 的 json.tool工具,JSON 字符串就会被很好的格式化。


echo '{"name": {"first_name":"Chris", "last_name":"Tao"} "age":33}' | python -m json.tool
复制代码



Oops!JSON 字符串无效,并且 json.tool 帮助我们定位了问题。 我们在名称对象后面漏掉了一个逗号。 所以添加逗号以使该 JSON 合法有效。


echo '{"name": {"first_name":"Chris", "last_name":"Tao"}, "age":33}' | python -m json.tool
复制代码



现在,JSON 字符串具有了完美缩进的格式化输出! 更加方便阅读。

4. 创建文本编辑器

你没看错,我们可以使用 Python 来”创建”一个文本编辑器。当然,它的功能非常有限,但是如果当前没有更好的选择,使用它会方便很多。另外,功能上肯定无法与 Vim 和 Nanos 相比,但是它完全是基于 UI 编辑器而不是命令行文本形式。这个编辑器由基于 Tkinter 实现的idlelib 模块创建,所以它是可以跨平台运行的。


假设我们要编写一个简单的 Python 程序来显示当前的时间,我想快速编写代码而不想下载和安装庞大的代码编辑工具。现在让我们运行下面这个命令。


mkdir get_time_apppython -m idlelib get_time_app/print_time.py
复制代码


如果文件目录不存在,idlelib将无法创建,因此如果必要,我们需要创建一个。我们运行完这个命令之后,print_time.py 只有执行保存的情况下才会创建到本地。现在应该会弹出编辑器,我们可以在里面写一些代码, 可以看到代码是支持语法高亮的。



现在我们使用ctrl+s快捷键对编辑好的代码进行保存,并关闭编辑窗口。接下来使用命令行查看一下编辑好的代码文件进行验证,没有任何问题。


cat get_time_app/print_time.py
复制代码


5. 创建可执行应用程序

如果我们想要创建一个简单的应用,比如前面写的获取当前时间的应用程序,我们不必再需要像 PyInstaller 这样的第三方工具包,Python 内置的 Zipapp 就可以做到。假设我们要打包成一个"Get Time"的应用,我们可以在命令行运行下面的命令。


python -m zipapp get_time_app -m "print_time:main"
复制代码


在该命令中,我们只需要给 zipapp设置get_time_app名称,指定 Python 程序的入口文件及其程序入口函数即可。 以.pyz为扩展名的文件就是我们创建的应用程序,至此我们就可以将项目作为单个文件而不是文件夹进行分发。



该程序的启动方式也很简单,直接使用 Python 进行调用即可。


python get_time_app.pyz
复制代码


6. 编码和解码字符串或文件

通过 Python CLI,我们可以加密字符串或文件。 我们以有趣的 ROT13 加密算法为例进行展示。ROT13 是一种偏移 13 位的凯撒密码,它的加密原理如下图所示。



我们可以使用 encodings.rot_13 来加密一个字符串,命令如下。


echo "I am Chris" | python -m encodings.rot_13
复制代码



切记,不要将其用于任何真正的加密内容。 因为英文有 26 个字母,所以再次运行这个算法我们可以很容易地破译这个加密字符串:)


echo 'V nz Puevf' | python -m encodings.rot_13
复制代码



现在让我们尝试一个更常见的场景——base64 编码。我们可以对字符串进行 base64 编码,如下所示。


echo "I am Chris" | python -m base64
复制代码



接下来,我们也可以使用-d参数对加密字符串进行解码。


echo "SSBhbSBDaHJpcwo=" | python -m base64 -d
复制代码



base64 也经常用在对图像文件的编码和解码上。我们也可以对文件进行如下编码。


python -m base64 get_time_app/print_time.py  
复制代码



非常有趣的是,解码后的 Python 脚本可以即时执行,不会报错。。


echo "ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCgpkZWYgbWFpbigpOgogICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUubm93KCkKICAgIHByaW50KGYnQ3VycmVudCB0aW1lIGlzIHtjdXJyZW50X3RpbWV9LicpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo=" | python -m base64 -d | python
复制代码


7. 获取系统元数据

如果我们想获取当前的系统信息,Python 提供了一种非常简便的方法。我们只需要运行下面的命令即可。


python -m sysconfig
复制代码



可以看到,这个命令执行后会显示所有的系统配置信息,比如 Python 环境路径和环境变量等。上面的截图仅仅展示了一部分内容,实际显示的内容会非常丰富。如果我们只想展示 Python 环境路径和当前工作路径,我们可以执行下面的命令。


python -m site
复制代码


8. 文件压缩

我们可以使用 Python 来压缩文件,而无需下载 tar/zip/gzip 等工具。举个例子,如果我们想压缩我们刚刚在第 4 节中编写的应用程序,我们可以运行以下命令将文件夹压缩到 zip 文件中。 在命令中,选项 -c 代表的是“create”即创建的含义。


python -m zipfile -c get_time_app.zip get_time_app
复制代码



当然,我们也可以对压缩文件进行解压。紧接这上面的操作,我们把文件夹解压出来放到一个新目录中,这样就不会和原来的目录冲突了。在下面的命令中,选项 -e 代表“extract”即解压的含义。


python -m zipfile -e get_time_app.zip get_time_app_extracted
复制代码


如果不放心,我们可以检验一下。


ls get_time_app_extractedcat get_time_app_extracted/get_time_app/print_time.py
复制代码



我们刚刚以 zip 文件为例进行了展示,Python 除了支持 zip 格式的解压缩以外,还支持 tar 和 gzip 的解压缩。

总结

该篇文章中介绍了一种无需编写任何代码即可使用 Python 内置库的方法。如果在某些场景下能够想到使用这些方法,毫无疑问可以给我们提供很多的便利。希望这篇文章能够给大家带来启发和帮助。

作者介绍

Christopher Tao,博士,数据工程师,擅长机器学习领域。


原文链接:

Eight “No-Code” Features In Python

2022-02-17 17:3512141
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 539.2 次阅读, 收获喜欢 1977 次。

关注

评论

发布
暂无评论
发现更多内容

时间戳,这样用就对了

Simon

MySQL timestamp

大数据平台架构设计探究

vivo互联网技术

大数据 架构设计 数据平台

Linux-技术专题-buffer/cache理解

洛神灬殇

【杭州】阿里巴巴搜索推荐事业部开发岗位招聘

iSausage

Java 阿里巴巴 推荐 搜索

CDN百科11 | 担心纸质病例被洪水淹没?ECS+CDN+OSS如何助力医疗上云

阿里云Edge Plus

CDN 存储 云服务器

互联网公司建网站时最应该注意什么?

姜奋斗

互联网 网络安全 网站 网站搭建 互联网公司

前端科普系列(1):前端简史

vivo互联网技术

大前端 Web

天地玄黄,宇宙洪荒

zhoo299

随笔杂谈

三分钟看懂Python和Java的区别

程序员生活志

Java Python

200 行代码就能骗人的首个聊天机器人

程序员生活志

编程 机器人

Java基础知识篇(2020最新版)准备放进收藏夹吃灰的勿进

简爱W

Java

机器学习算法之——逻辑回归(Logistic Regression)原理详解及Python实现

迈微AI研发社

学习 算法 逻辑回归 正则化 梯度下降

牧羊少年奇幻之旅

W

读书笔记 感悟

2020中国RPA指数测评报告|T研究

人称T客

MySQL常用函数介绍

Simon

MySQL mysql常用函数

拼多多员工小便池拉屎,网易智能马桶屏蔽信号,360、搜狐厕所被监控,互联网公司厕所那些事!

程序员生活志

互联网 职场

机器学习 | 卷积神经网络详解(二)——自己手写一个卷积神经网络

迈微AI研发社

Python 神经网络 学习 卷积神经网络 CNN

获奖公布丨程序员的七夕骚话该怎么讲?留下你爱的表白~

InfoQ写作社区官方

写作平台 话题讨论 七夕 热门活动

vivo web service:亿万级规模web服务引擎架构

vivo互联网技术

架构 Web 浏览器

InnoDB 事务加锁分析

vivo互联网技术

MySQL 数据库 innodb

从零开始的深度学习实用教程 | PyTorch官方推荐

迈微AI研发社

人工智能 学习 算法 教程 PyTorch

机器学习算法之——隐马尔可夫模型原理详解及Python实现

迈微AI研发社

Python 学习 算法 隐马尔可夫模型 HMM

给路灯按上“电话卡”,从此不仅只照明还给管理员“打电话”

华为云开发者联盟

人工智能 物联网 物联网化 华为云 路灯

浅谈备受开发者好评的.NET core敏捷开发工具,讲讲LEARUN工作流引擎

Philips

高效程序员的45个习惯:敏捷开发修炼之道(4)

石云升

读书笔记 敏捷开发

一个域名值百万, 现在不注册,未来价更高

华为云开发者联盟

备案 商标 DNS 域名配置 SSL证书

我一个普通程序员,光靠GitHub打赏就年入70万,要不你也试试

程序员生活志

区块链最激动人心的未来是什么

CECBC

大数据 区块链技术

必看的数据库使用规范

Simon

MySQL 技术规范

带你认识MySQL sys schema

Simon

MySQL

机器学习算法之——卷积神经网络(CNN)原理讲解

迈微AI研发社

神经网络 学习 算法 CNN

Python中的八个“无代码”特性_语言 & 开发_Christopher Tao_InfoQ精选文章