Python NetworkX-Graph.nodes()如何接受参数?

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):

当我在这里查看Graph.nodes()的代码时:它不接受任何参数。那么,我如何能够传递类似data=True(例如,Graph.nodes(data=True))?理想情况下,我会得到一个“得到一个意外的关键字参数'data'”错误


它也作为属性进行装饰,但我可以将其作为函数调用。这可能是一个基本的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更熟悉的时候),日常用户可以不知道这一点