Как вызвать граф в определении функции в networkx? - PullRequest
0 голосов
/ 10 ноября 2018

Ниже приведен мой код. Я хочу назвать график, написанный внутри функции, как 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)

1 Ответ

0 голосов
/ 10 ноября 2018

Это проблема переменной области. Переменная 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...