Python NetworkX-Graph.nodes()如何接受参数?
当我在这里查看Graph.nodes()的代码时:它不接受任何参数。那么,我如何能够传递类似data=True(例如,Graph.nodes(data=True))?理想情况下,我会得到一个“得到一个意外的关键字参数'data'”错误Python NetworkX-Graph.nodes()如何接受参数?,python,networkx,Python,Networkx,当我在这里查看Graph.nodes()的代码时:它不接受任何参数。那么,我如何能够传递类似data=True(例如,Graph.nodes(data=True))?理想情况下,我会得到一个“得到一个意外的关键字参数'data'”错误 它也作为属性进行装饰,但我可以将其作为函数调用。这可能是一个基本的python问题,但这是我第一次遇到这个问题。将networkx放在一边。以这个代码片段为例 class CallableIterable: def __init__(self, val):
它也作为属性进行装饰,但我可以将其作为函数调用。这可能是一个基本的python问题,但这是我第一次遇到这个问题。将
networkx
放在一边。以这个代码片段为例
class CallableIterable:
def __init__(self, val):
self.val = val[:]
def __call__(self, arg1=True):
print('acting as a callable')
return f'You called this with {arg1}'
def __contains__(self, arg):
print('acting as an iterable')
return arg in self.val
class Graph:
@property
def nodes(self):
return CallableIterable([1, 2, 3, 4, 5])
您可以看到有两个类CallableIterable
和Graph
Graph
具有一个属性nodes
,该属性在调用时返回CallableIterable
的实例
创建Graph
g
的实例
g=Graph()
现在,您可以通过两种方式使用属性g.nodes
作为一个iterable
打印(1英寸g节点)
这给
acting as an iterable
True
acting as a callable
You called this with some random value
这是因为中的触发了\uuuu包含CallableIterable
类(在本例中)的方法
作为可调用的
print(g.nodes('some random value'))
这给
acting as an iterable
True
acting as a callable
You called this with some random value
这是因为它触发了CallableIterable
类的\uuu调用
方法
在()
中传递的参数,在本例中是
的'some random value'
,或者在您的示例中是Graph()的data=True
。节点(data=True)
被传递到属性的返回值的调用(即g.nodes)
,不可属性修饰函数图.节点
在内部,这是g.nodes.\uuuu调用('some random value')
根据这种理解,将相同的原理应用于networkx
,其中NodeView
是返回的对象类型,而不是本例中所示的callableTable
,工作是相同的
是的一个实例
这个类有一个类和一个方法
它允许您将其用作可调用/函数
(Graph().nodes(data=True))
)和作为一个iterable(Graph().nodes中的“某物”
)
NodeView
类除了调用\uuuuuuu
和\uuuuu包含
之外,还有其他函数,每个函数都将被适当调用
这就是docstrings对以下内容的基本含义
哇!感谢您用一个例子进行详细解释。Python的强大令人惊讶,但它也可以以非常难以理解的方式使用。我很高兴我能帮上忙:D,如果你想了解更多这方面的信息(当你对python更熟悉的时候),日常用户可以不知道这一点