2013-02-27 69 views
0

如何運行python函數。例如,如果我有一個名爲test.py的文件和裏面的函數像如何運行python函數

def closest_to(l,v): 
    num = l[0] 
    diff_min = abs(l[0] - v) 
    for i in xrange(1,len(l)): 
     diff = abs(l[i] - v) 
     if diff < diff_min: 
      diff_min = diff 
      num = l[i] 
    return num 

我將如何測試函數closest_to?

+0

http://stackoverflow.com/questions/3371255/writing-unit-tests-in-python- how-do-i-start – 2013-02-27 03:31:40

回答

2

任何在全球範圍內的功能之外將作爲腳本的一部分來執行:

def closest_to(l,v): 
    num = l[0] 
    diff_min = abs(l[0] - v) 
    for i in xrange(1,len(l)): 
     diff = abs(l[i] - v) 
     if diff < diff_min: 
      diff_min = diff 
      num = l[i] 
    return num 

result = closest_to(val1, val2) 
print result 

如果你想有test.py僅與函數的定義,並想從調用這些功能另一個文件,可以從需要使用任何函數的文件中導入test.py。

# Some-other-file.py 
import test 
result = test.closest_to(val1, val2) 
print result 

如果test.py包含了很多功能,你知道你將只使用其中的幾個,你可以導入這些特定的少數。

# Another-file.py 
from test import closest_to, farthest_to 
result = closest_to(val1, val2) 
print result 
farthest_to(val1, val2) 

我做了一個假設,即功能farthest_to沒有任何返回值,所以沒有嘗試存儲或打印。如果你試圖存儲/打印這樣的值,你會得到

+0

?好吧,我只需要在文件的全局部分中調用該函數?我不能在文件外或直接從命令行調用它,而不在文件內部實現它? – 2013-02-27 03:27:42

+0

我已經更新了我的答案和其他幾個我認爲正在尋找的替代方案。 – Tuxdude 2013-02-27 03:34:36

+0

好吧,我用nearest_to([1,2,3],3)做了這個,但是它給了我一個錯誤'closest_to is not defined' – 2013-02-27 03:35:20

-2

我會啓動python解釋器並導入文件。然後,你可以測試所有你喜歡:)

3

來源:What does if __name__ == "__main__": do?

當你的腳本由將它作爲一個命令到Python解釋器運行, 蟒蛇myscript.py 所有的代碼是在縮進級別0被執行。定義的函數和類已經定義好了,但是他們的代碼都沒有運行。

所以,如果你的腳本的內容如下:

def closest_to(l,v): 
    num = l[0] 
    diff_min = abs(l[0] - v) 
    for i in xrange(1,len(l)): 
     diff = abs(l[i] - v) 
     if diff < diff_min: 
      diff_min = diff 
      num = l[i] 
    return num 

if __name__ == '__main__': 
    val1 = 10 
    val2 = 200 

    print 'Closes to %s, %s =' % val1, val2, 
    print closest_to(val1, val2) 

當您運行

$ python script.py 

它將調用和輸出你的函數的結果。或者我嘗試使用doctests,如果我想嘗試小方法,管理起來更容易。

例如:

def mysum(*args): 
    """Returns the sum of all given arguments 

    >>> mysum(1,2,3,4) 
    10 
    >>> mysum(1,2) 
    3 
    >>> mysum(1, -1) 
    0 
    >>> mysum(1) 
    1 
    """ 
    return sum(*args) 

if __name__ == "__main__": 
    import doctest 
    doctest.testmod() 

運行它,並給它一個嘗試:

$ python mysum_script.py 
相關問題