Превращение функции в переменную другого

#python #graph #networkx

#python #График #networkx

Вопрос:

Я создал функцию grid(n) на Python (используя networkx), которая возвращает простой график с «n» узлами. Сейчас я пытаюсь создать другую функцию под названием «edge». Я хочу, чтобы «edge» принимался grid(n) в качестве аргумента, и я хочу использовать «n» (в grid (n)) в теле функции edge. Возможно ли это?

Я пытался:

 def edge(grid(n)):
"function body"
  

Но это выдает мне недопустимую синтаксическую ошибку?

Любая помощь была бы высоко оценена,

Джек

Комментарии:

1. было ли мое объяснение полезным?

Ответ №1:

Если вы вызываете edge(grid(n)) , то edge будет вызван с grid(n) . Что такое grid(n) ? По-видимому, это простой график с n узлами. Таким образом, он будет реагировать так же, как если бы вы сделали

 G = grid(n)
edge(G)
  

Вы можете делать такие вещи, как

 def edge(fxn, argument):
    G = fxn(argument)
    print G.edges()[0]
edge(grid,n)
  

отправить функцию в качестве аргумента другой функции. Из вашего вопроса мне не ясно, делает ли это то, что вы хотите сделать.

Ответ №2:

Невозможно!!!

при определении метода будут указаны только имена параметров (не значения). Таким образом, типичное определение метода было бы похоже:

 def fun(param1,param2,...):
  

Обратите внимание, что вы всегда можете указать значения по умолчанию для параметров.

когда вы пишете: def edge(grid(n)): , сначала будет выполняться метод grid (n), а затем он вернет некоторый объект, но вы должны указать имена параметров при определении метода.

Альтернативный:

Вы можете определить метод edge следующим образом:

 def edge(grid,n):
   g = grid(n)
   #do rest of the stuff here !!!!
  

В приведенном выше коде вы передаете метод grid в качестве первого аргумента, а затем n в качестве второго аргумента. Вы всегда можете вызвать метод grid внутри метода edge, как показано.

Ответ №3:

Когда вы определяете функцию, вы должны указать только параметр:

 def edge(graph):
    pass
  

и когда вы вызываете функцию, вы передаете в нее параметр:

 edge(grid(n))
  

или вы могли бы написать граничную функцию, которая зависит от параметра «n»:

 def edge(n):
    graph = grid(n)
    #using graph variable
  

Комментарии:

1. Спасибо за ваш ответ.

Ответ №4:

Поскольку вы хотите использовать значение n для обеих функций, вы можете попробовать следующим образом :

 def grid(n):
    """
    Function Body
    """

def edge(n):
    """
    Function Body
    """

def main():
    n = 2
    grid(n)
    edge(n)

main()