如何在python中从函数返回字典和多个变量?

如何在python中从函数返回字典和多个变量?,python,function,variables,dictionary,return,Python,Function,Variables,Dictionary,Return,我试图建立一个函数,记录两个变量和一个字典,字典工作,但两个变量返回错误的东西 mydict{} fname = 0 lname = 0 def enterdetails(fname, lname): fname = input ("First Name: "); fnamedict = fname mydict['FirstName'] = fnamedict; lname = input ("Last Name: "); lnamedict = lna

我试图建立一个函数,记录两个变量和一个字典,字典工作,但两个变量返回错误的东西

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。我该如何解决这个问题呢?

你不能将报税表放在像这样的报税表下面

您可以采取的方法之一是:

  ....
  return [mydict, fname, lname]

data = enterdetails(fname, lname)
mydict = data[0]
fname = data[1]
lname = data[2]
你不能把报税表放在像这样的报税表下面

您可以采取的方法之一是:

  ....
  return [mydict, fname, lname]

data = enterdetails(fname, lname)
mydict = data[0]
fname = data[1]
lname = data[2]
您有两个return语句,但只返回第一个。相反,将所有三个变量作为元组一起返回:

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

mydict, fname, lname = enterdetails(fname, lname)
print(fname, lname)
print(mydict)
您有两个return语句,但只返回第一个。相反,将所有三个变量作为元组一起返回:

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

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

字典之所以有效,是因为您将其设置为全局变量。 然而,该函数实际上是首先返回字典,因此您的解包过程完全是一团糟

删除return mydict或使用return mydict、fname、lname,这样您将得到:

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

但是正如我上面提到的,mydict是一个全局变量,因此不需要返回值。

字典可以工作,因为您将它设置为全局变量。 然而,该函数实际上是首先返回字典,因此您的解包过程完全是一团糟

删除return mydict或使用return mydict、fname、lname,这样您将得到:

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


但正如我前面提到的,mydict是一个全局变量,因此不需要返回值。

不能返回多个变量。一个解决方案是将它们全部放在一个dict中。您的代码没有意义,您有两个返回语句,只有第一个将执行。您可以返回dict和变量的元组,如return mydict、fname、lname。不过,您可以使用语句进行查看。@VincentBeltman-您完全可以返回多个变量-以元组形式返回它们-就像OP在return fname行中所做的一样,lname-虽然在这种情况下不需要括号。@VincentBeltman:不是真的。不能返回多个变量。一个解决方案是将它们全部放在一个dict中。您的代码没有意义,您有两个返回语句,只有第一个将执行。您可以返回dict和变量的元组,如return mydict、fname、lname。不过,您可以使用语句进行查看。@VincentBeltman-您完全可以返回多个变量-以元组形式返回它们-就像OP在return fname行中所做的一样,lname-虽然在这种情况下不需要括号。@VincentBeltman:不是真的。您不需要使用列表来返回多个项目-您可以使用return mydict、fname、lname,然后使用mydict、fname、lname=enterDetailsName、lname来调用它。@TonySuffolk66 yeah刚才提到了其中一种方法,编辑它以使其更好。其他答案已使用tuple发布-没有必要更改您的答案以复制其他人。@TonySuffolk66没有看到其他答案,因此将其保留在我的答案中,因为它以前是这样的您不需要使用列表返回多个项目-您只需使用return mydict、fname、lname,然后使用mydict、fname、lname=enterdetailsfname,当你调用它时,我会告诉你。@TonySuffolk66是的,刚才提到了其中一种方法,编辑它以使其更好。其他答案已使用元组发布-没有必要更改你的答案以复制其他人。@TonySuffolk66没有看到其他答案,所以离开了我的答案,因为之前我不得不阅读两次才能理解它,但这是关于全局变量的一个非常好的观点,其他答案没有提到。我必须读两遍才能理解它,但这是关于全局变量的一个非常好的观点,其他答案没有提到。