2009-04-15 53 views
24

在我以前的question,安德魯·賈菲寫道:如何返回與打印不同的功能的輸出?

除了所有其他的提示和技巧的,我覺得你失去了一些東西的關鍵:你的功能實際上需要返回的東西。 當您創建autoparts()splittext()時,想法是這是一個您可以調用的函數,它可以(也應該)回饋一些東西。 一旦你找出你想要的函數的輸出,你需要把它放在return聲明中。

def autoparts(): 
    parts_dict = {} 
    list_of_parts = open('list_of_parts.txt', 'r') 

    for line in list_of_parts: 
     k, v = line.split() 
     parts_dict[k] = v 

    print(parts_dict) 

>>> autoparts() 
{'part A': 1, 'part B': 2, ...} 

該函數創建一個字典,但它不返回東西。但是,由於我添加了print,因此在運行該函數時會顯示該函數的輸出。 return ing什麼和print ing之間的區別是什麼?

回答

55

打印只需打印出結構到您的輸出設備(通常是控制檯)。而已。要從您的功能返回它,您應該這樣做:

def autoparts(): 
    parts_dict = {} 
    list_of_parts = open('list_of_parts.txt', 'r') 
    for line in list_of_parts: 
     k, v = line.split() 
     parts_dict[k] = v 
    return parts_dict 

爲什麼要返回?那麼如果你不這樣做,那麼這個字典就會消亡(被垃圾收集),並且只要這個函數調用結束就不能再訪問了。如果你返回值,你可以用它做其他的事情。如:

my_auto_parts = autoparts() 
print my_auto_parts['engine'] 

看看發生了什麼? autoparts()被調用,它返回parts_dict並將其存儲到my_auto_parts變量中。現在我們可以使用這個變量來訪問字典對象,即使函數調用結束,它仍然繼續存在。然後我們用鍵'引擎'在字典中打印出對象。

對於一個很好的教程,請查看dive into python。它是免費的,很容易遵循。

3

你只需要添加一個return語句...

def autoparts(): 
    parts_dict={} 
    list_of_parts = open('list_of_parts.txt', 'r') 
    for line in list_of_parts: 
     k, v = line.split() 
     parts_dict[k] = v 
    return parts_dict 

打印出只打印出的應用程序的標準輸出(屏幕)。您還可以通過用逗號分隔返回多的事情:

return parts_dict, list_of_parts 

使用它:

test_dict = {} 
test_dict = autoparts() 
7

print語句將輸出一個對象給用戶。一旦函數完成,返回語句將允許將字典分配給變量

>>> def foo(): 
...  print "Hello, world!" 
... 
>>> a = foo() 
Hello, world! 
>>> a 
>>> def foo(): 
...  return "Hello, world!" 
... 
>>> a = foo() 
>>> a 
'Hello, world!' 

或者在返回字典的情況下:

>>> def foo(): 
...  print {'a' : 1, 'b' : 2} 
... 
>>> a = foo() 
{'a': 1, 'b': 2} 
>>> a 
>>> def foo(): 
...  return {'a' : 1, 'b' : 2} 
... 
>>> a = foo() 
>>> a 
{'a': 1, 'b': 2} 

(其中沒有任何一條線執行後,打印出來的陳述意味着最後一個語句返回無)

3

我想你'因爲你從REPL運行,會自動打印出你調用函數時返回的值。在這種情況下,無論您是否有創建值並將其打印出來並將其拋出的函數,您都可以得到相同的輸出,或者您有一個創建值並返回值的函數,讓REPL打印它。

但是,這些都是非常不一樣的東西,你會發現當你用另一個函數調用autoparts時,想要用autoparts創建的值做些事情。