2012-04-10 78 views
1

這是在我的第一次,所以我很感激了可能出現跛腳看問題:)調用函數n次帶兩個參數

我試圖寫一個函數調用do_n你的耐心是將一個函數對象和一個數字n作爲參數,然後調用給定函數n次。下面的代碼:

def name(): 
    print 'Jack' 

def do_n(fo, x): 
    if x <= 0: 
     return 
    print fo 
    (fo, x-1) 

使得從內主要的函數調用時:

do_n(name, 3) 

我得到以下結果:

<function name at 0x01F93AF0> 

我試圖讓程序打印out:

Jack 
Jack 
Jack 

非常感謝廣告vance

+0

這個問題由Allen B.來自「認爲Python」唐尼。該問題及其背景可在以下網址找到: http://www.greenteapress.com/thinkpython/html/thinkpython006.html – ewm 2015-04-16 02:25:32

回答

5

您既沒有調用該函數,也沒有實際執行遞歸調用。修改後的版本:

def name(): 
    print 'Jack' 

def do_n(fo, x): 
    if x <= 0: 
     return 
    fo() 
    do_n(fo, x - 1) 

要調用函數n次,你平時在Python中使用一個for循環,而不是尾遞歸:

for dummy in range(10): 
    name() 
+0

太棒了!感謝澄清隊友。 – tamiromara 2012-04-10 10:11:36

+0

有沒有比這更清潔的方法?虛擬變量未使用... – Har 2014-04-02 15:54:02

+1

@ user1932405:這就是爲什麼它被稱爲「虛擬」。我其實認爲它是完全可讀的。你可以做一些像'map(apply,repeat(name,10))'(Python 2.x,'itertools'中的'repeat')的東西,以避免重複提及計數器變量。當然,這會創建一個內部的計數器變量,也是無用的返回值列表。說實話,我從來沒有遇到過一個簡單地調用無參數函數10次的用例,所以這一切都可能有點學術。 – 2014-04-02 17:12:26

2

函數是Python中的第一類對象。

fo()