1、一直在纠结编译器是如何找到所要导入的module的;类似于math这些已有的module可以在/Libs/site-package里导入,而自己定义的模块呢
而后发现在pydev下同一源文件下的模块可以直接导入- -
2、练习
1)
1 import math 2 3 a = math.fabs(-4.3) #4.3 4 b = math.sin(34.5) #0.0574874781049 5 c = math.floor(-4.3) #-5.0 6 d = math.ceil(-4.3) #-4.0 7 e = math.ceil(4.1) #5.0 8 9 10 help(math.floor) 11 help(math.ceil)
几个挺有用的math函数。
顺便:假如想找math.ceil()的作用,在help(math)中找ceil的作用可以,直接help(math.ceil)也可以。[当然,在导入模块后才能使用help() - -]
1 Help on built-in function floor in module math: 2 3 floor(...) 4 floor(x) 5 6 Return the floor of x as a float. 7 This is the largest integral value <= x. 8 9 Help on built-in function ceil in module math: 10 11 ceil(...) 12 ceil(x) 13 14 Return the ceiling of x as a float. 15 This is the smallest integral value >= x.
2)自己编写help
上述的help是库函数内的,假如自己要为自己写的模块写help呢?
这是我的文件树,可以看下/src下有两个.py,其中一个为自定义的模块,另一个为测试文件。
代码:
1 #test.py 2 3 import test_module 4 help(test_module) 5 6 7 #test_module.py 8 9 def to_celsius(t): 10 '''it is a function''' 11 return (t - 32.0) * 5.0 / 9.0
而后的显示:
1 Help on module test_module: 2 3 NAME 4 test_module 5 6 FILE 7 c:\users\dsdn\workspace_python\test\src\test_module.py 8 9 FUNCTIONS 10 to_celsius(t) 11 it is a function
test_module.py中的三引号中的内容已经可以显示在help()中了
3)代码测试
使用nose模块来测试代码——python自带库unittest也可以,以后我试着写下。
源码【平时测试时最好不要只写一条assert(line 8),写多种特殊结果保证测试】
1 #test.py 2 3 import nose 4 from test_module import to_celsius 5 #import test_module 6 7 def test_to_celsius(): #def test_to_celsius(t): 8 assert to_celsius(32) == 34 9 10 if __name__ == '__main__': 11 nose.runmodule() 12 13 #test_module.py 14 15 def to_celsius(t): 16 '''it is a function''' 17 return (t + 1)
为了方便些写测试,我把to_celsius()这个函数的return 改为简单的 t+1 了。
几点需要注意:
1、要使用line 4的导入而非line 5的导入,不然会报错
1 E 2 ====================================================================== 3 ERROR: __main__.test_to_celsius 4 ---------------------------------------------------------------------- 5 Traceback (most recent call last): 6 File "C:\Python27\lib\site-packages\nose\case.py", line 197, in runTest 7 self.test(*self.arg) 8 File "C:\Users\dsdn\workspace_python\test\src\test.py", line 10, in test_to_celsius 9 assert to_celsius(32) == 34 10 NameError: global name 'to_celsius' is not defined 11 12 ---------------------------------------------------------------------- 13 Ran 1 test in 0.001s 14 15 FAILED (errors=1)
line 10指出函数to_celsius 这个未定义。
使用line 4也可以,不过测试的时候得具体指出(line 8处)
assert test_module.to_celsius(32) == 34
2、line 7处,不要使用注释掉的函数,即测试函数不能接受参数。
3、其实这段代码执行起来会报错。
1 F 2 ====================================================================== 3 FAIL: __main__.test_to_celsius 4 ---------------------------------------------------------------------- 5 Traceback (most recent call last): 6 File "C:\Python27\lib\site-packages\nose\case.py", line 197, in runTest 7 self.test(*self.arg) 8 File "C:\Users\dsdn\workspace_python\test\src\test.py", line 10, in test_to_celsius 9 assert test_module.to_celsius(32) == 34 10 AssertionError 11 12 ---------------------------------------------------------------------- 13 Ran 1 test in 0.001s 14 15 FAILED (failures=1)
我已经贴了两个报错的调试信息,不同的是,第一个为 NameError, 提示为E;第二个报错为AssertionError,提示为F。
原因,就是我故意把“assert test_module.to_celsius(32) == 33“写成”assert test_module.to_celsius(32) == 34“了= =
测试代码执行后会得出下列三种结果之一:
1、Pass,即实际值与期望值相符;
2、Error,即测试本身出了问题,代码中有bug,就像import module之后调用方法得module.method;
3、Fail,即实际值与期望值不符。
4、关于AssertionError
assert test_module.to_celsius(32) == 34, ‘wrong’
我们可以通过这样显示报错信息,这里只是随手写了一个wrong,以后具体情况具体提示。
4)关于测试的练习
这本书有一点,有很多开放性题目,而我往往回答不上来- -
sorry for no conments :(
1 #test.py 2 3 import nose 4 from test_module import distance 5 6 def close(left, right): 7 return abs(left - right) < 1.0e-6 8 9 def test_distance(): 10 assert close(distance(1.0, 0.0, 1.0, 0.0), 0.0), 'Identical points fail.' 11 assert close(distance(0.0, 0.0, 1.0, 0.0), 1.0), 'Unit distance fail.' 12 13 14 if __name__ == '__main__': 15 nose.runmodule() 16 17 #test_module.py 18 19 import math 20 21 def distance(x0, y0, x1, y1): 22 return math.sqrt((x1 - x0) ** 2 + (y1 - y0) **2 )
简单来说,就是测两点间距离的。
Q1:test_module.py中,函数返回一浮点数,说明为什么这样会使测试变得更加困难。【私以为是浮点数比较麻烦,浮点数的比较,计算,存储什么的挺复杂】
Q2:test.py中,这样的测试有哪几个缺点【我觉得挺好,要说不足,测试太少,加个distance(0.0, 0.0, 0.0, 0.0)的测试如何?】