2013-02-27 58 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