首页 > 解决方案 > 如何在networkx的函数定义中调用图形?

问题描述

以下是我的代码。我想将函数内部编写的图形称为 ktgraph。我想知道 bdsize 为 6 有多少个节点,但是当我输入 number_of_nodes(ktgraph) 时它是不可调用的。我该怎么做呢?

def MyBoard(bdSize):
    ktGraph = nx.Graph()
    ktGraph.add_node(bdSize) 
    for row in range(bdSize):
       for col in range(bdSize):
           nodeId = (row*bdSize) + col
           newPositions = MoveTo(row,col,bdSize)
           for e in newPositions:
               nid = e[0]*bdSize+ e[1]
               ktGraph.add_edge(nodeId,nid)
               no = ktGraph.number_of_nodes()
    return nx.draw(ktGraph, with_labels = True)

标签: pythonpython-3.xfunctionnetworkx

解决方案


这是一个可变范围问题。变量 ktGraph 具有局部作用域,只能从函数内部访问。您可以从函数内部打印所需的值,返回变量并捕获它,或者只是将局部变量分配给函数外部的全局变量并自由使用。

例子:

global_var_outside_func
def MyBoard(bdSize):
    ktGraph = nx.Graph()
    ktGraph.add_node(bdSize) 
    for row in range(bdSize):
       for col in range(bdSize):
           nodeId = (row*bdSize) + col
           newPositions = MoveTo(row,col,bdSize)
           for e in newPositions:
               nid = e[0]*bdSize+ e[1]
               ktGraph.add_edge(nodeId,nid)
               no = ktGraph.number_of_nodes()

    #referencing a global variable using global keyword
    global global_var_outside_func

    #assign the desired variable to it for inspection
    global_var_outside_func = ktGraph

    return nx.draw(ktGraph, with_labels = True)

推荐阅读