2017-06-21 128 views
-6

我有一個非常簡單的函數,它返回一個值。嘗試使用沒有函數其他部分的返回值

def GetNumber(): 
    Number = 45 
    print("Getting Number") 
    print("Found Number = " + str(Number)) 
    return Number 

def UseNumber(current): 
    print("The current number is: " + str(current)) 

UseNumber(GetNumber()) 

然而,我的輸出如下:

獲取數

實測值總數= 45

的當前數目是:45

我使用在我的另一部分打印出def GetNumber應用程序,所以我需要保留它們,但我想從GetNumber中提取值,而不必每次都重新運行整個GetNumber函數。

我怎樣才能使用返回的值,而不真正運行整個功能並打印出來?

理想情況下,我想我的輸出僅僅是:

目前的數字是:45

這是在所有可能的?

+1

重寫函數(執行預期的行爲,可能使用參數作爲開關)和/或調用不同的函數。 – user2864740

+0

我不知道爲什麼這是越來越被投票遺忘。我是Python的新手,並試圖學習。這是我可以學習的最佳方式。請原諒我不是一個公然的專業人士,比如你們其他人。 – level42

+0

你已經明確地寫了幾行代碼來將東西打印到控制檯,但是接着問你如何讓東西停止打印到控制檯? – csmckelvey

回答

1

你所要求的不能這樣做。處理這個問題的一種方法是重構代碼,在不同的函數中分解不同部分中使用的部分,然後在需要的地方調用所需的部分。在這個玩具例如這可以被實現爲:

def get_number(): 
    number = 45 
    return number 

def print_number(number): 
    print(number) 

number1 = get_number() 
print_number(number1) 

number2 = get_number() 
print("my number is: {}\n".format(number2)) 

這給你的邏輯和你的UI之間的更好的分離。

3

通常情況下,您希望有一些分支控件指定要執行的函數的哪些部分,以便不寫入死代碼。但爲了純粹回答你的問題,返回值將會破壞函數的執行。下面的例子:

def GetNumber(): 
    Number = 45 
    return Number 
    print("Getting Number") 
    print("Found Number = " + str(Number)) 

這隻會返回45.不過,這是不是寫這個方法,因爲這些報表打印從未得到執行的最佳方式。我建議你寫一個新的方法,刪除你不需要的代碼,或者引入一些分支條件(ifelse)。對不起,我的第一個晦澀的答案。

+3

這似乎是一種處理事物的不好方法。爲什麼要引入死代碼?看來,OP需要一個關於函數如何工作的更基本的解釋。 – JohanL

+0

呃...我一直在盯着Python,從字面上看,我的大腦被炸了。我的印象是返回必須在函數的最後,但我認爲這對我很有用。 – level42

+1

除非有條件可以使代碼執行,否則註釋代碼是有道理的。這一切都取決於問題陳述,但我會編輯更清楚。 – Peter

5

您可以在功能參數,可以讓你的功能或沒有內打印出補充:

def GetNumber(print_num=False): 
    number = 45 

    if print_num: 
     print(number) 

    return number 

GetNumber(True) 

num = GetNumber() 

print("my num is: {}\n".format(num)); 

GetNumber(True)將打印出數函數內,而GetNumber()將簡單地返回數量不打印它。請注意,在我上面的示例中,無論如何設置print_num,它都會返回該數字。你可以使用它,或者乾脆忽略它。

我們設置了print_num=False。這意味着如果參數未送入,我們將默認值False設置爲它。