Python posiada przydatną opcję, z którą można wykonać swoje programy (-m), czyli wykonanie modułu jako skryptu:
-m mod : run library module as a script (terminates option list)
Do nauki posłuży prosty program obliczający ciąg Fibonacciego, ale filtrujący po liczbach nieparzystych. Dodatkowo stworzyłem testy dla dwóch funkcji.
import unittest
def add(f1, f2):
return f1 + f2
def swap(f1, f2):
f3 = add(f1, f2)
return f2, f3
def print_odd(num):
print 'Odd fibo ', num
def fibo(f1 = 0, f2 = 1):
[print_odd(num) for num in [f1, f2] if num % 2]
for _ in xrange(20):
f1, f2 = swap(f1, f2)
if f2 % 2:
print_odd(f2)
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
pass
def test_add(self):
self.assertEqual(add(2, 1), 3)
def test_swap(self):
self.assertEqual(swap(1, 2), (2, 3))
fibo()
Jednym z takich, przydatnych wbudowanych modułów jest profiler (przydatna
instrukcja). Jak widać punkcja print_odd(), została zwołana tylko 14 razy, bo tyle jest nieparzystych liczb, wśród pierwszych 20-tu elementów ciągu.
$ python -m cProfile asdf.py
57 function calls in 0.007 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.007 0.007 asdf.py:1(<module>)
20 0.000 0.000 0.000 0.000 asdf.py:1(add)
1 0.000 0.000 0.007 0.007 asdf.py:11(fibo)
20 0.000 0.000 0.000 0.000 asdf.py:4(swap)
14 0.007 0.001 0.007 0.001 asdf.py:8(print_odd)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
Drugi przydatny moduł, o którym się dowiedziałem służy do wykonywania testów jednostkowych.
$ python -m unittest discover --pattern=asdf.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK