【问题标题】:How to return a dictionary and multiple variables from a function in python?如何从python中的函数返回字典和多个变量?
【发布时间】:2014-10-08 07:49:50
【问题描述】:

我正在尝试设置一个记录到 2 个变量和一个字典的函数,字典可以工作,但两个变量返回错误的东西

mydict{}
fname = 0
lname = 0

def enterdetails(fname, lname):
    fname = input ("First Name: ");
    fnamedict = fname
    mydict['FirstName'] = fnamedict;

   lname = input ("Last Name: ");
   lnamedict = lname
   mydict['LastName'] = lnamedict;
   print(fname)
   print(lname)

   return mydict
   return (fname, lname)

fname, lname = enterdetails(fname, lname)
print(fname, lname)
print(mydict)

但是 fname 和 lname 的变量分别作为 FirstName 和 LastName 出来。我该如何解决这个问题?

【问题讨论】:

  • 您不能返回多个变量。一种解决方案是将它们全部放在一个字典中。
  • 您的代码没有意义,您有 2 个返回语句,只有第一个会执行。你可以像这样返回一个字典和变量的元组return mydict, fname, lname
  • 不过,您可以考虑使用 yield 语句。
  • @VincentBeltman - 您绝对可以返回多个变量 - 在元组中返回它们 - 就像 OP 在 return (fname, lname) 行中所做的那样 - 尽管在这种情况下不需要括号。跨度>
  • @VincentBeltman:不正确。

标签: python function variables dictionary return


【解决方案1】:

您有两个return 语句,但只返回第一个。相反,将所有三个变量作为一个元组一起返回:

def enterdetails(fname, lname):
    ...
    return mydict, fname, lname

mydict, fname, lname = enterdetails(fname, lname)
print(fname, lname)
print(mydict)

【讨论】:

    【解决方案2】:

    字典之所以有效,是因为您将其设置为global variable。 然而,这个函数实际上是先返回“字典”,所以你的解包都搞砸了。

    删除return mydict 或使用return mydict, (fname, lname),这样你最终会得到:

    mydict, (fname, lname) = enterdetails(fname, lname)
    

    但正如我上面提到的,mydict 是一个全局变量,所以没有必要返回值。

    【讨论】:

    • 我必须阅读两遍才能理解它,但这是关于全局变量的一个很好的观点,其他答案没有解决。
    【解决方案3】:

    你不能把return 放在return 的下面

    return mydict
    return (fname, lname) #this won't return any thing
    

    您可以做的其中一种方法是:

      ....
      return [mydict, fname, lname]
    
    data = enterdetails(fname, lname)
    mydict = data[0]
    fname = data[1]
    lname = data[2]
    

    【讨论】:

    • 你不需要使用一个列表来返回多个项目——你可以在调用它时使用return mydict, fname, lname然后mydict, fname, lname = enterdetails(fname,lname)
    • @TonySuffolk66 是的,刚刚提到了一种方法,编辑它以使其更好
    • 已使用元组发布了另一个答案 - 没有必要更改您的答案以复制其他人。
    • @TonySuffolk66 没有看到其他答案,所以让我保持原来的样子
    猜你喜欢
    • 2020-04-19
    • 2012-05-23
    • 2017-11-23
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    相关资源
    最近更新 更多