2013-05-11 49 views
0

讓假設我有在python此功能:函數返回一定基於規則(對象或值)

def get_thing(rule): 
    if rule == 0: 
     return 5   #<<<< int 
    elif rule == 1: 
     return 'Hello' #<<<<< string 
    else: 
     return Student() #<<<<< Object 

上述功能返回基於一個不同的值(int或串或對象)規則。

我應該使用上述功能或使用此功能:

def get_int() 
    return 5 

def get_string() 
    return 'Hello' 

def get_student() 
    return Student() 

我的意思是Python的一個函數返回不同的數據類型或值?

在java中,你只能返回一個類型Ex:String only。

我希望你能理解我的問題:)

謝謝。

編輯: 其他例子

def get_person(id): 
    if #id is belongs to student: 
     return Student() 
    elif #id belongs to teacher 
     return Teacher() 
+0

你需要什麼? – piokuc 2013-05-11 23:57:02

+0

我想你將不得不爲這個問題提供更多的上下文。這就是說,第一個片段看起來不是一個好的解決方案。 – Jared 2013-05-11 23:58:08

+3

http://stackoverflow.com/a/1839350/834998 – Greg 2013-05-12 00:01:43

回答

0

它是確定從Python中的函數返回不同類型的值。就實現而言,考慮使用字典而不是嵌套ifs,例如:

def get_thing(rule): 
    return { 0 : 5, 1 : 'Hello'}.get(rule, Student()) 
+2

從Python的角度來看,它是可以的,但這不是一個好的維護做法。請參閱上面評論中的PartiallyFinite鏈接。 – rslite 2013-05-12 00:05:27

+0

這取決於情況。有很多情況下它是絕對好的。由於某種原因,Python有了鴨子打字功能。 – piokuc 2013-05-12 00:06:58

+2

你給出的最後一個例子就是一個很好的例子。學生和老師可以從一個函數返回,即使它們是靜態類型的語言,如C++或Java,如果它們都有一個共同的基類(Person),這實際上是一個很好的OO設計。 – piokuc 2013-05-12 00:11:29