当前位置: 首页 > news >正文

Python 高手编程系列三十五 :Hy

Hy(http://docs.hylang.org/)是完全用 Python 编写的 Lisp 方言。许多用 Python 实现其
他代码的类似项目,通常仅尝试标记代码的普通形式(作为类文件对象或字符串提供),并
将其解释为一系列显式的 Python 调用。与其他项目不同,Hy 可以被看作一种完全在 Python
运行环境中运行的的语言,就像 Python 一样。用 Hy 编写的代码可以使用现有的内置模块
和外部包,反之亦然。用 Hy 编写的代码导入到 Python 中。
为了将 Lisp 嵌入 Python 中,Hy 将 Lisp 代码直接转换成 Python 抽象语法树。在 Python
中导入 Hy 模块之后,利用注册过的导入钩子可以实现导入互操作性(interoperability)。所
有.hy扩展名的模块都被看作Hy模块,都可以像普通Python模块那样导入。下面这个“hello
world”程序就是用这种 Lisp 方言编写的:
;; hyllo.hy
(defn hello [] (print “hello world!”))
利用下列 Python 代码可以将其导入并执行:

import hy
import hyllo
hyllo.hello()
hello world!
如果我们进一步钻研,尝试利用内置的 dis 模块反汇编 hyllo.hello,那么我们会
注意到,Hy 函数的字节码与它对应的纯 Python 代码的字节码没有很大差别,如下所示:
import dis
dis.dis(hyllo.hello)
2 0 LOAD_GLOBAL 0 (print)
3 LOAD
CONST 1 (‘hello world!’)
6 CALL
FUNCTION 1 (1 positional, 0 keyword pair)
9 RETURN
VALUE
def hello(): print(“hello world!”)
dis.dis(hello)
1 0 LOAD
GLOBAL 0 (print)
3 LOAD
CONST 1 (‘hello world!’)
6 CALL
FUNCTION 1 (1 positional, 0 keyword pair)
9 POP
TOP
10 LOAD
CONST 0 (None)
13 RETURN
_VALUE
小结
本章介绍了与类有关的最佳语法实践。首先介绍了子类化内置类型和调用超类中的方
法的基本内容。然后介绍 Python 中面向对象编程的高级概念。它们都是关于类属性访问的
有用的语法特性,即描述符和 property。它们可用于创建更整洁、更加可维护的代码。
本章还介绍了槽,重点强调始终应该谨慎使用它。
本章的其余部分探讨了 Python 元编程的宏大主题。这一语法特性包含各种元编程模式
(例如装饰器和元类),本节对其进行详细描述,并给出现实代码的实例。
元编程的另一个重要方面是动态代码生成,本章仅做简要描述,因为这一主题太过宏
大,而本书篇幅有限。但本书应该是一个很好的起点,给出了该领域内容的快速总结。
选择好的名称
大部分标准库在构建时都要考虑可用性。例如,内置类型的使用是很自然的,其设计
非常易于使用。在这种情况下,Python 可以与你开发程序时所思考的伪代码进行比较。大
部分代码都可以大声朗读出来。例如,任何人都可以理解下面这个代码片段:
my_list = []
if ‘d’ not in my_list:
my_list.append(‘d’)
这就是编写 Python 比编写其他语言更加简单的原因之一。在编写程序时,你的思路可
以快速转换成代码。
本章重点介绍编写易于理解和使用的代码的最佳实践,包括:
• 使用 PEP 8 描述的命名约定。
• 一组命名最佳实践。
• 常用工具的简要介绍,这些工具可以让你检查是否遵守风格指南。
PEP 8 与命名最佳实践
PEP 8 为编写 Python 代码提供了一个风格指南。除了空格缩进、每行最大长度以及其他
与代码布局有关的细节等基本规则之外,PEP 8 还介绍了大部分代码库所遵循的命名约定。
本节给出了这一 PEP 的简要总结,并进一步给出了每种元素的命名最佳实践指南。但
你仍然必须阅读 PEP 8 文档。
为何要遵守 PEP 8 以及何时遵守 PEP 8
如果你正在创建一个打算开源的新软件包,那么答案很简单:始终遵守。PEP 8 实际
上是大多数 Python 开源软件的标准代码风格。如果你想接受来自其他程序员的任何协作,即使你对最佳代码风格指南有不同的看法,那么也应该坚持遵守 PEP 8。这样做的好处是,
其他程序员可以更容易地直接上手你的项目。对于新人来说,代码更容易阅读,因为它的
风格与大多数其他 Python 开源包一致。
此外,开始时完全遵守 PEP 8,可以让你在未来省时省事。如果你想向公众发布你的
代码,最终其他程序员也会建议你切换到 PEP 8。关于对某一特定项目是否真有必要这么
做的争吵,可能会变成一场永无止境并且永远没有赢家的口水战(flame war)。这是令人悲
伤的事实,但为了不失去贡献者,你最终可能还是会被迫与这种风格保持一致。
而且,如果整个项目的代码库处于成熟的开发状态,那么对其重新调整风格(restyling)
可能需要做大量的工作。在某些情况下,重新调整风格可能需要修改几乎每行代码。虽然
大多数修改可以自动化完成(缩进、换行和行尾空格),但这种大规模的代码检查通常会给
所有基于分支的版本控制工作流程引入许多冲突。同时审查这么多修改也很困难。基于上
述原因,许多开源项目都有一条规则:风格修改应该始终包含在单独的拉取/合并
(pull/merge)请求或补丁中,而不影响任何功能或 bug。
超越 PEP 8 — 团队的风格指南
尽管 PEP 8 提供了一套全面的风格指南,但仍为开发者留有一些自由,特别是在嵌套
数据字面量与需要很长的参数列表的多行函数调用方面。有些团队可能会认为他们需要额
外的风格规则,最好的做法就是正式发布某种文件供所有团队成员使用。
此外,在某些情况下,对于没有定义风格指南的一些老项目,严格遵守 PEP 8 可能在
经济上不可行。这样的项目仍然可以从正式发布的编码约定中受益,即使这些约定中没有
体现 PEP 8 的官方规则。要记住,比遵守 PEP 8 更重要的是项目内的一致性。如果有正式
发布的规则供每名程序员参考,那么在项目内和组织内保持一致性就简单多了。
命名风格
Python 中使用的不同命名风格包括以下几种。
• 驼峰式命名法(CamelCase)。
• 混合式命名法(mixedCase)。
• 大写(UPPERCASE)或大写加下划线(UPPER_CASE_WITH_UNDERSCORES)。
• 前缀(leading ) 和后缀 ( trailing)下划线,有时是双下划线(doubled)。
小写元素和大写元素通常是一个单词,有时是几个单词连在一起。使用下划线的通常
是缩写短语。使用一个单词要更好一些。前缀和后缀下划线用于标记私有元素和特殊元素。
这些风格被应用到以下几种情形。
• 变量。
• 函数和方法。
• property。
• 类。
• 模块。
• 包。
变量
Python 中有两种变量:
• 常量。
• 公有和私有变量。
1.常量在初始化代码中使
用,而不在代码主体中使用,所以这种冗长的名称并不会令人厌烦。
有些常量的名称也是由底层技术驱动的。例如,os 模块使用 C 中定义的一些常量,例
如 EX_XXX 系列定义了 Unix 退出代码编号。例如,同样的名称代码可以在系统的 C 头文
件 sysexits.h 中找到,如下所示:
import os
import sys
sys.exit(os.EX_SOFTWARE)
使用常量的另一个好的做法是,将它们集中放在使用它们的模块顶部,如果它们要用
于下列操作,那么就将其组合在新的变量中:
import doctest
TEST_OPTIONS = (doctest.ELLIPSIS |
doctest.NORMALIZE_WHITESPACE |
doctest.REPORT_ONLY_FIRST_FAILURE)

http://www.zskr.cn/news/1532397.html

相关文章:

  • 2026年评价高的语音识别芯片市场格局梳理与优质供应商选型分析
  • 2026年魔芋面品牌推荐榜单:0脂低卡荞麦魔芋面/免泡即食代餐/酸辣麻酱味OEM源头厂家深度评测 - 品牌发掘
  • 告别CondaValueError:升级Conda、清理.condarc与重建虚拟环境的完整避坑流程
  • 软件项目管理WBS拆解:解决需求模糊难题与多场景任务分配,提升软件项目管理效能
  • Windows 11升级难题终极解决方案:MediaCreationTool.bat完全使用指南
  • 2026年q2国内低温压差膨化机源头厂家综合排行:山东,变温压差膨化机/宠物食品冻干机/山东冻干机/实力盘点 - 优质品牌商家
  • 2026年 广东滚筒厂家推荐榜:包胶/无动力/链轮/主动/从动/积放/304不锈钢/压槽/镀锌/电动滚筒实力之选 - 品牌发掘
  • 2026年高端汽车维修公司选型:中高端汽车维修/全车整备保养/同城汽车维修/周边汽车保养/核心维度与实操推荐 - 优质品牌商家
  • 如何构建Nintendo Switch大气层系统:从源码到部署的完整指南
  • 从 Dubbo+ZK 到 Nacos:注册中心深度拆解
  • 2026年最新AI写作辅助网站全攻略(含保姆级操作教程)
  • 2026q2西安原点办公家具厂家联系方式实测评测:西安办公家具源头厂家/西安原点办公家具联系方式/实力盘点 - 优质品牌商家
  • XUnity自动翻译器:打破游戏语言壁垒的智能翻译插件
  • 手把手教你排查Vitis 2021.1头文件缺失问题:以xparameters.h为例的BSP编译指南
  • 语音识别 + TTS:搭建一个语音笔记助手
  • Multi-Agent系统负载均衡策略:基于队列、基于能力与基于负载的调度
  • Python机器学习建模实战:从数据到部署的关键路径
  • 算法复杂度的可视化评估与优化策略研究的技术8
  • LLM因果对齐底层机理
  • LLM轻量化联邦微调机理
  • 老旧小区二次供水泵房数字化改造系统方案
  • 群边界理论与密集融合:拓扑视角下的代数结构
  • 2026年6月国内技术好的家庭音响品牌推荐,汽车全车隔音改装/家庭影院音响/汽车隔音改装/音响改装,家庭音响品牌哪家好 - 品牌推荐师
  • 意甲幻想足球球员得分预测:机器学习实战指南
  • 原神智能辅助工具:基于视觉识别的自动化解决方案
  • 3分钟掌握Windows任务栏透明化:TranslucentTB终极配置指南
  • 台湾中文内容安全检测技术Breeze Guard解析
  • 瓷砖哪个好
  • 2026年近期杭州新能源包装销售厂家选择标准:专业视角下的评估体系 - 品牌鉴赏官2026
  • paperxie 论文降重降 AIGC 双处理:分类型方案精准应对知网维普双重检测审核