2014-10-08 121 views
1

我想设置一个记录到2个变量和字典的功能,dictionar作品,但两个变量返回错误的事情如何从python中的函数返回一个字典和多个变量?

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出来的名字和姓氏分别。我将如何解决这个问题?

+1

您不能返回多个变量。一个解决方案将把他们全部在一个字典。 – 2014-10-08 07:52:11

+2

你的代码没有意义,你有2个return语句,只有第一个会执行。你可以返回你的字典和变量的元组,如'return mydict,fname,lname' – EdChum 2014-10-08 07:52:22

+0

你可以看看使用[yield](http://stackoverflow.com/questions/231767/what-does-the-yield -keyword-do-in-python)语句。 – MrHug 2014-10-08 07:53:20

回答

3

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

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

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

你不能把一个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] 
+1

您不需要使用列表来返回多个项目 - 当您调用它时,您可以只使用'return mydict,fname,lname',然后使用'mydict,fname,lname = enterdetails(fname,lname)'。 – 2014-10-08 07:57:16

+0

@ TonySuffolk66是刚刚提到的方式之一,编辑它使其更好 – Vizjerei 2014-10-08 07:58:28

+0

另一个答案已发布使用元组 - 没有一点改变你的答案复制别人的elses。 – 2014-10-08 07:59:24

1

这本字典的作品,因为你有它设置为global variable。 但是,该函数实际上首先会返回“字典”,因此您的解包全部搞砸了。

取出return mydict或使用return mydict, (fname, lname),所以你会结束:

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

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

+0

我不得不阅读这两次了解它,但这是一个关于其他答案没有解决的全局变量非常好的一点。 – o11c 2014-10-08 08:10:44