如何构造Python代码:函数、类、模块?

如何构造Python代码:函数、类、模块?,python,networkx,Python,Networkx,这是一个关于如何更好地将Python代码组织到函数/类和模块中的问题。如果你能解释一下什么是组织工作的最佳方式,我将非常感激 代码可以分为两部分:第1部分基于Networkx有向图构造一棵树,第2部分对该树的节点进行一些计算,递归地处理其节点并输出一个数字 代码的简化版本: a1 = 200; a2=250; n=50 #Constants, User inputs constantes =['x','y','z']

这是一个关于如何更好地将Python代码组织到函数/类和模块中的问题。如果你能解释一下什么是组织工作的最佳方式,我将非常感激

代码可以分为两部分:第1部分基于Networkx有向图构造一棵树,第2部分对该树的节点进行一些计算,递归地处理其节点并输出一个数字

代码的简化版本:

a1 = 200; a2=250; n=50                       #Constants, User inputs
constantes =['x','y','z']                    #Constants calculated from User input
G=nx.DiGraph()                               #I initiate the graph
for step in range(0,n+1):
    if not current_step_nodes:
        current_step_nodes = ['a']
        G.add_nodes_from(current_step_nodes)
    else:
        for i in current_step_nodes:
            a=[i]
            for j in constantes:
                a.append(''.join(sorted(i + j)))
            G.add_edges_from(_tree_edges(a,3))
            a=[]
    current_step_nodes = [w for w in G.nodes() if len(w) == step]
因此,这构建了一个树G,它看起来像:

 For n=2: a->ax, a->ay, a->az
下一步:我将属性“s1”和“s2”添加到G的每个节点

for ns1 in G.nodes():
    G.node[ns1]['s1']=products1     #products1 are numbers calculated in the code
    G.node[ns1]['s2']=products2
---这棵树就这样结束了,我希望我能保存它,不要再碰它了

第2部分:添加一个atribure“值”并从叶递归工作:

for leafs in set(w for w in G.nodes() if len(w) == n):
    G.node[leafs]['value']=max(s1*G.node[leafs]['s1']-s2*G.node[leafs]['s2'],0)
for i in reversed(xrange(n)):
    nodes_in_i = [w for w in  G.nodes() if len(w) == i]
    for node in nodes_in_i:
        for succ in G.successors(node):
            G.node[node]['value']=G.node[node]['value']+G.node[succ]['value']
最终,我对根“a”的“value”的值感兴趣。目前,我将此代码作为名为arboln的大型函数的一部分,因此我只需:

return G.node['a']['value']
--我现在想看看当n增加时,这个“值”是如何变化的:

def main(): 
    for n in xrange(8):
        print arbol(n)
--例如,现在我想用这棵树做更多的事情,比如添加更多的属性,做其他的计算,比如看看如果用户输入发生变化,G.node['a']['value']是如何变化的

因此,理想情况下,我希望将其拆分为几个文件,如:arbol.py、value.py、value\u when\u changes.py等

这是我认为应该组织代码的方式。但是我不知道如何构造和编码,也就是说,这个图可以是一个类吗?G可以是这个类的一个实例吗?然后我可以使用函数更改/添加此图G的属性吗


谢谢你的建议!我对Python很陌生

我认为codereview.stackexchange.com是提出此类问题的地方。我不确定。我认为codereview是改进代码的地方。我的代码不需要检查。我打算将此作为一个问题来学习如何构造代码,这本质上是一个编程问题,以及如何在函数/类中使用networkx图。