首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回的奇数性态

函数返回的奇数性态
EN

Stack Overflow用户
提问于 2018-05-19 19:47:04
回答 2查看 70关注 0票数 1

我花了很多时间搜索所有的“我的函数不返回任何”和“嵌套的dict”消息,没有一个具体应用,也没有任何解决我的问题。

我创建了一个函数来搜索嵌套字典并返回路径。这个很好用!我可以在函数中打印结果,但在打印下面的返回不返回任何结果。也许我看了它太久了,它可能就在我的面前,但我只是不知道这里出了什么问题。这是我的完整代码:

代码语言:javascript
复制
def search(v, searchterm, vid, path=(),):
    if isinstance(v, dict):
        for k, v2 in v.items():
            p2 = path + ('{}'.format(k),)
            search(v2, searchterm, vid, p2)
    else:
      if searchterm in v:
         a = {}
         a[0] = path
         a[1] = v[vid]
         print(a)
         return(a)


def main():

    mydata = {}
    mydata[1] = {}
    mydata[1][1] = 'data-1-1','reason-1-1','notes-1-1'
    mydata[1][2] = 'data-1-2','reason-1-2','notes-1-2'
    mydata[1][3] = 'data-1-3','reason-1-3','notes-1-3'
    mydata[1][4] = 'data-1-4','reason-1-4','notes-1-4'
    mydata[1][5] = 'data-1-5','reason-1-5','notes-1-5'
    mydata[1][6] = 'data-1-6','reason-1-6','notes-1-6'
    mydata[1][7] = 'data-1-7','reason-1-7','notes-1-7'
    mydata[1][8] = 'data-1-8','reason-1-8','notes-1-8'
    mydata[1][9] = 'data-1-9','reason-1-9','notes-1-9'
    mydata[1][10] = 'data-1-10','reason-1-10','notes-1-10'
    mydata[2] = {}
    mydata[2][1] = 'data-2-1','reason-2-1','notes-2-1'
    mydata[2][2] = 'data-2-2','reason-2-2','notes-2-2'
    mydata[2][3] = 'data-2-3','reason-2-3','notes-2-3'
    mydata[2][4] = 'data-2-4','reason-2-4','notes-2-4'
    mydata[2][5] = 'data-2-5','reason-2-5','notes-2-5'
    mydata[2][6] = 'data-2-6','reason-2-6','notes-2-6'
    mydata[2][7] = 'data-2-7','reason-2-7','notes-2-7'
    mydata[2][8] = 'data-2-8','reason-2-8','notes-2-8'
    mydata[2][9] = 'data-2-9','reason-2-9','notes-2-9'
    mydata[2][10] = 'data-2-10','reason-2-10','notes-2-10'

    b = search(mydata,'reason-2-4', 2)
    print(b)

if __name__ == '__main__':
   main()

结果:

代码语言:javascript
复制
{0: ('2', '4'), 1: 'notes-2-4'}
None

您可以从函数内部看到print工作得很好,但是main的返回和打印不返回任何。我已经用Python编程了几年,编写了许多函数、类和方法,并编写了返回,但这次我陷入了困境。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-19 19:55:05

您正在进行递归调用,并且在嵌套调用中发出print语句。但是,没有使用search的返回值,这就是为什么它从未到达main函数的原因。

下面,我添加了一个被检查的nested变量,如果发现了任何内容,它实际上是返回的。

代码语言:javascript
复制
def search(v, searchterm, vid, path=(),):
  if isinstance(v, dict):
    for k, v2 in v.items():
      p2 = path + ('{}'.format(k),)
      nested = search(v2, searchterm, vid, p2)
      if nested:
        # before, nothing was ever returned here
        return nested  
    else:
      if searchterm in v:
         a = {}
         a[0] = path
         a[1] = v[vid]
         print(a)
         return(a)

不相关,但在这里,您可以很好地利用python强大的dict文本。

代码语言:javascript
复制
  mydata = {
    1: {
      1: ('data-1-1', 'reason-1-1', 'notes-1-1'),
      2: ('data-1-2', 'reason-1-2', 'notes-1-2')
    2: {
      1: ('data-2-1', 'reason-2-1', 'notes-2-1'),
      2: ('data-2-2', 'reason-2-2', 'notes-2-2')
    }

此外,如果所有字典键都是int,则最好使用list

票数 4
EN

Stack Overflow用户

发布于 2018-05-19 19:56:23

在search()中的3条路径中,只有1条返回:

代码语言:javascript
复制
def search(v, searchterm, vid, path=(),):
    if isinstance(v, dict):
        # Path 1
        for k, v2 in v.items():
            p2 = path + ('{}'.format(k),)
            search(v2, searchterm, vid, p2)
        # Nothing returned here
    else:
      if searchterm in v:
         # Path 2
         a = {}
         a[0] = path
         a[1] = v[vid]
         print(a)
         return(a)
      else:
         # Path 3
         # Nothing returned here

Path 1调用Path 2,这解释了为什么有些东西是打印出来的,但没有返回给main()。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50428894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档