0

你如何运行python函数。例如,如果我有一个名为 test.py 的文件和里面的函数

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?

4

3 回答 3

3

来自:if __name__ == "__main__": 怎么办?

当您的脚本通过将其作为命令传递给 Python 解释器来运行时,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
于 2013-02-27T03:40:38.347 回答
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没有任何返回值,因此不尝试存储或打印它。如果您尝试存储/打印这样的值,您将得到none

于 2013-02-27T03:25:07.477 回答
-2

我将启动 python 解释器并导入文件。然后你可以测试所有你喜欢的:)

于 2013-02-27T03:32:47.123 回答