2014-12-05 57 views
-1

如果我寫:Python函數號不會影響它運行多少次?

def f(n): 
    blah 
f(x) 

這時只要「X」是一個數字,F將運行一次。例如我剛剛嘗試過:

def f(n): 
    c = 1 
    print c 
f(x) 

'x'爲0,然後爲10,輸出爲'1'兩次。數字'x'實際上代表什麼,以及如何讓函數運行'x'次數?

我已經用解決方法解決了我的問題(我之前會發布此問題,但顯然我僅限於每90分鐘發佈一次),但我仍然想知道未來。

我的程序看起來與此類似:

def f(n): 
    m = 0 
    c = blah 
    if condition(c): 
     m = 1 
    d = line involving c that had to be run before the end of the function loop, but after the if statement 
    f(m) 
f(1) 

但產量不斷循環,因爲即使m = 0時,F(0)還是造成了功能循環。我的解決方法是:

m = 0 

def f(n): 
    global m 
    m = 0 
    c = blah 
    if condition(c): 
     m = 1 
    else: 
     m = 0 
    d = line involving c that had to be run before the end of the function loop, but after the if statement 
    if m = 1: 
     f(1) 
f(1) 

後就正常了(實際上,回頭看的話,我不認爲「d」確實需要if語句後運行,所以我可以,如果條件剛剛做了(c):f(1)),但似乎是多餘的。我不知道爲什麼我必須爲f(n)指定一個數字,但是如果我將它留空或輸入一個字符串,它將無法運行。有沒有一個「笨拙」的解決辦法呢?

(我真的很新的節目,所以請解釋相當簡單而言..!)

謝謝!

回答

3

如果你想要運行一些東西,你只需要編寫一些描述循環。對於已知的提前量,可以使用for

def f(n): 
    for i in range(n): 
     print i+1, "Pax is awesome" 
    print 

x = 3 
f(x) 
f(x-1) 
f(7) 

運行該代碼會給你:

1 Pax is awesome 
2 Pax is awesome 
3 Pax is awesome 

1 Pax is awesome 
2 Pax is awesome 

1 Pax is awesome 
2 Pax is awesome 
3 Pax is awesome 
4 Pax is awesome 
5 Pax is awesome 
6 Pax is awesome 
7 Pax is awesome 

如果你想循環,直到一般條件遇到(而不是固定次數),則可以使用while而不是for

def f(n): 
    while (n % 8) != 0: 
     print n, "Pax is awesome" 
     n += 1 
f(3) 

這個循環將繼續運行,直到n達到八的倍數:

3 Pax is awesome 
4 Pax is awesome 
5 Pax is awesome 
6 Pax is awesome 
7 Pax is awesome 

你的解決方法似乎有點緊張,尤其是在這個意義上,他們使用完全沒有必要遞歸。

您應該瞄準清晰度代碼作爲您的主要目標(我稱這爲可讀性優化)。這樣做會使代碼不太可能包含錯誤,並且更容易維護。

+0

哦,好的,所以如果我把範圍(n)放在我的範圍內:... if:n + = 1或者什麼的 - 那可行嗎?雖然我猜想,因爲它只在函數的開始處讀取'in range in(n)',所以if命令不會改變任何內容,並且該函數仍然只會運行一次。 – Patrik333 2014-12-05 03:13:39

+0

此外,我仍然不確定爲什麼函數首先需要一個參數,因爲您可以只寫「for i in range(x)」,而不是......?我想這樣寫起來更容易,就像你調用函數時那樣? – Patrik333 2014-12-05 03:20:12

+0

@Patrik,你不需要_change_'i','for-range'循環爲你做。而且,就參數而言,這只是良好的編碼習慣。你可能想從其他地方調用函數,使用'y'或'42'。我將修改示例以顯示這兩個功能。 – paxdiablo 2014-12-05 03:20:16