一种用于从C++迁移到 Python 的技术,用于减少缺少标识符声明的影响
A technique for a C++-to-Python migrant to lessen the impact of missing identifier declarations
在举一个具体的例子之前,让我提一下这个问题。作为一个在C++方面拥有丰富经验的初级 Python 程序员,我总是缺少变量声明。我可以屈服于记录每个重要标识符类型的诱惑,但我有一种感觉,这不会是非常pythonic的。首先,解释器和任何工具都不解析这些非正式声明是愚蠢的。如果口译员这样做了,那将是一种完全不同的语言。
作为仅编写注释的替代方法,我正在考虑切换到创建数据类型的模式,其唯一目的是强制执行类型/接口。它们会简化代码,让我在早期阶段检测类型错误。为了方便起见,我将从间接中付出一点效率损失。
例如,为了避免将注释"按 employeeID 索引的 Employee 对象字典"编写,我将编写一个名为"EmployeeDict"的包装类,其接口将限制可以/不能执行的操作。
从长远来看,这样的想法会成功吗?它是否以某种方式击败了Python的精神?它是否被经验丰富的Pythonistas使用?
对于那些熟悉C++的人,换句话说,我会翻译
typedef std::map<EmployeeId, Employee> MyMap;
成一个类型。(尽管我实际上并没有移植任何代码。
更新
即使它是非物理的,正如HumphreyTriscuit所证实的那样,我也不愿意写出被人类阅读的评论,而不会自动化一点类型检查。很高兴这个问题在 3.5 中得到解决,但我暂时停留在 2.7 中,所以我会将 jsbueno 的答案标记为正确,直到有人可以提出一种方法——à la "assert isinstance(param, dict)",但也简洁地确认了键/值的类型,有点平行C++——在 2.7 中解决这个问题。
实际上,从 Python 3.5 开始,该语言捆绑了用于参数类型注释的工具,这些工具可以被第三方工具自省 - 其中 tehre 可能已经存在一些 ut。
无论如何,看看 https://www.python.org/dev/peps/pep-0484/
即使您不使用任何其他工具 - 上面 PEP 484 中描述的方式是声明类型的"Pythonic 方式",不会与其他第三方工具冲突。因此,如果您想按照您的描述编写工具链,您应该首先使用该 PEP 中所述的函数注释进行创建。
这对于记录(如果是这种情况,则进行加密)、参数和返回值很有帮助。对于类属性,您可以查看我的这个答案,基于在层次结构的 abse 类上制作一个特殊的__setitem__
方法:
强制 python 类成员变量为特定类型
至于局部变量 - 没有办法强制执行/检查它们的类型,而是代码注释。
最后一个建议是让你"走上Python之路",记住要宽容并检查接口,而不是特定的类。
- 1d 智能指针不适用于语法 (*)++
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 用于访问容器<T>数据成员的正确 API
- 重载操作程序时出错>>用于类中的字符串 memebr
- 用于检查二叉树是否对称的技术
- C++用于理顺递归的模板技术
- 用于计算来自不同实例的响应数的编码技术
- C 技术/库,用于组合容器和自定义逻辑
- std::lower_bound 不是专门用于红黑树迭代器的任何技术原因吗?
- 'top'程序用于在屏幕上重新显示数据的技术是什么?
- 技术术语,用于命名可以采用两个值(真和假)的类的属性
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 用于减小CPU指令大小的C++技术
- 一种用于从C++迁移到 Python 的技术,用于减少缺少标识符声明的影响
- 哪种技术用于动态更新组合框中的值
- 用于在 C++ 中管理特定于平台的代码的内联命名空间技术
- QML和一种适用于Windows的地图/定位技术的集成
- 用于在堆上生成对象的函数式编程技术
- 哪些技术被用于创建NFS最想要的2005
- 用于防止代码中死锁的锁定策略和技术