【问题标题】:Making a function the variable of another使一个函数成为另一个函数的变量
【发布时间】:2016-10-21 21:58:08
【问题描述】:

我在 Python 上创建了一个函数 grid(n)(使用 networkx),它返回一个带有“n”个节点的简单图形。我现在正在尝试创建另一个名为“edge”的函数。我希望“边缘”接受grid(n) 作为参数,并且我想在边缘函数的主体中使用“n”(在 grid(n) 中)。这可能吗?

我试过了:

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

但它给了我一个无效的语法错误?

任何帮助将不胜感激,

杰克

【问题讨论】:

  • 我的解释有帮助吗?

标签: python graph networkx


【解决方案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) 方法将首先执行,然后它会返回一些对象,但您应该在定义方法时提供参数名称。

    替代:

    你可以这样定义边缘方法:

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

    在上面的代码中,您将 grid 方法作为第一个参数传递,然后将 n 作为第二个参数传递。如图所示,您始终可以在边缘方法中调用网格方法。

    【讨论】:

      【解决方案3】:

      当你定义一个函数时,你应该只指定参数:

      def edge(graph):
          pass
      

      当你调用函数时,你会将参数传递给它:

      edge(grid(n))
      

      或者你可以编写依赖于“n”参数的边缘函数:

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

      【讨论】:

      • 感谢您的回答。
      【解决方案4】:

      既然你想为这两个函数使用值n,你可以这样尝试:

      def grid(n):
          """
          Function Body
          """
      
      def edge(n):
          """
          Function Body
          """
      
      def main():
          n = 2
          grid(n)
          edge(n)
      
      main()
      

      【讨论】:

        猜你喜欢
        • 2013-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-24
        • 1970-01-01
        • 1970-01-01
        • 2022-12-06
        • 1970-01-01
        相关资源
        最近更新 更多