假设我有以下代码:
link = neo4j.Path(this_node,"friends",friend_node) #create a link between 2 nodes
link.create(graph_db) #add the link aka the 'path' to the database
Run Code Online (Sandbox Code Playgroud)
但是我们稍后会说:
link2 = neo4j.Path(friend_node,"friends",this_node)
link2.create_or_fail(graph_db)
Run Code Online (Sandbox Code Playgroud)
基本上,link.create_or_fail()将是一个将link2路径添加到数据库的函数,或者如果路径已经存在则失败.
在这种情况下,当我打电话时link = neo4j.Path(this_node,"friends",friend_node),我已经创建了一条路径this_node,friend_node因此link2.create_or_fail(graph_db)不应该做任何事情.这样的功能可能吗?
有点蟒蛇新手,所以请耐心等待.我在python中有两个代码片段:
def summer(step, track, lst):
if track<10:
lst.append(1)
summer(step,track+step,lst)
return lst
Run Code Online (Sandbox Code Playgroud)
调用summer(1,1,[])返回
[1, 1, 1, 1, 1, 1, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)
现在让我说我有:
def summer(step, track):
if track<10:
track +=step
summer(step,track)
return track
Run Code Online (Sandbox Code Playgroud)
调用summer(1,1)返回2
请注意这两个片段之间的相似性,在第一个片段中,我将附加到列表中,最后返回该列表.它按预期工作.
在第二个中,我改为递增一个变量,但最后当我返回它时,它不能按预期工作(当它应该返回11时返回2).我明白这是因为在第二个片段中我是递归调用的
summer(step,track)
Run Code Online (Sandbox Code Playgroud)
当我应该说
return summer(step,track)
Run Code Online (Sandbox Code Playgroud)
但为什么在第一个片段中,我可以简单地打电话
summer(step,track+step,lst)
Run Code Online (Sandbox Code Playgroud)
代替
return summer(step,track+step,lst)
Run Code Online (Sandbox Code Playgroud)
它仍然有效吗?即看起来跟踪列表和递归中的int是不同的处理?