【问题标题】: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()