编程语言
首页 > 编程语言> > 算法 – Pythonic方法处理网络数据结构的方法

算法 – Pythonic方法处理网络数据结构的方法

作者:互联网

那么,关于什么是Pythonic的另一个问题!在这种情况下,应用程序域是网络算法(如节点,边缘,Dijkstra,那种东西……),我以前只用强类型语言编写的东西,我们可以非常确定一切是什么.

同时在Python中,我有一个类网;此类的单个实例表示网络.我有一个类Edge,它为网络中的每个边缘实例化.除其他外,每个Edge实例都具有唯一的ID.

有时我希望通过引用相关的Edge实例来删除边.其他时候我希望使用其ID删除Edge.说实话,我开始忘记哪些变量是边缘,哪些是ID.我认为我更喜欢这份工作:-P

所以我提出两个解决方案:

>开始使用系统匈牙利表示法 – 更好地命名我的变量,以便我知道它们是实际的Edge对象还是我想要的Edge的id.实现强类型 – 使remove_edge(这是Net上的一个方法)明确拒绝任何不是Edge的东西.创建一个包装函数remove_edge_id,从其id中查找相关的Edge,然后调用remove_edge;这个函数同样拒绝任何不是id的东西.
>使用鸭子打字. remove_edge检查参数是id还是Edge,然后用它做正确的事.

Whadday’all估计?

解决方法:

鸭子打字解决方案远远超过Pythonic.然而,不是测试参数以查看它是ID还是边缘,而是将其视为首先是更常见的情况,如果这不起作用,请尝试另一种方式.

如果您确实使用显式类型检查(有时是唯一的方法),请使用isintance()而不是type(),以便它可以使用子类.

变量可以是有名的或命名不佳的,这与您是否使用强类型是正交的.如果您有一些引用Edge ID的变量,以及引用Edge实例的其他变量,那么即使您正在使用duck typing,以某种方式区分它们也会很明智.我会使用像edge和edge_id这样的东西而不是匈牙利语.

标签:python,algorithm,typechecking,duck-typing
来源: https://codeday.me/bug/20190613/1235415.html