2014-10-08 118 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