Инструменты / Утилиты Python
Стандартная библиотека поставляется с рядом модулей, которые можно использовать как модули, так и как утилиты командной строки.
Diş модуль
Модуль dis - это дизассемблер Python. Он преобразует байтовые коды в формат, который немного больше подходит для человеческого употребления.
Вы можете запустить дизассемблер из командной строки. Он компилирует данный сценарий и печатает дизассемблированные байтовые коды в STDOUT. Вы также можете использовать dis как модуль. Вdis Функция принимает в качестве единственного аргумента класс, метод, функцию или объект кода.
пример
#!/usr/bin/python
import dis
def sum():
vara = 10
varb = 20
sum = vara + varb
print "vara + varb = %d" % sum
# Call dis function for the function.
dis.dis(sum)
Это даст следующий результат -
6 0 LOAD_CONST 1 (10)
3 STORE_FAST 0 (vara)
7 6 LOAD_CONST 2 (20)
9 STORE_FAST 1 (varb)
9 12 LOAD_FAST 0 (vara)
15 LOAD_FAST 1 (varb)
18 BINARY_ADD
19 STORE_FAST 2 (sum)
10 22 LOAD_CONST 3 ('vara + varb = %d')
25 LOAD_FAST 2 (sum)
28 BINARY_MODULO
29 PRINT_ITEM
30 PRINT_NEWLINE
31 LOAD_CONST 0 (None)
34 RETURN_VALUE
PDB Модуль
Модуль pdb - это стандартный отладчик Python. Он основан на структуре отладчика bdb.
Вы можете запустить отладчик из командной строки (введите n [или next], чтобы перейти к следующей строке и получить список доступных команд) -
пример
Прежде чем пытаться бежать pdb.py, правильно укажите путь к каталогу Python lib. Итак, давайте попробуем с приведенным выше примером sum.py -
$pdb.py sum.py
> /test/sum.py(3)<module>()
-> import dis
(Pdb) n
> /test/sum.py(5)<module>()
-> def sum():
(Pdb) n
>/test/sum.py(14)<module>()
-> dis.dis(sum)
(Pdb) n
6 0 LOAD_CONST 1 (10)
3 STORE_FAST 0 (vara)
7 6 LOAD_CONST 2 (20)
9 STORE_FAST 1 (varb)
9 12 LOAD_FAST 0 (vara)
15 LOAD_FAST 1 (varb)
18 BINARY_ADD
19 STORE_FAST 2 (sum)
10 22 LOAD_CONST 3 ('vara + varb = %d')
25 LOAD_FAST 2 (sum)
28 BINARY_MODULO
29 PRINT_ITEM
30 PRINT_NEWLINE
31 LOAD_CONST 0 (None)
34 RETURN_VALUE
--Return--
> /test/sum.py(14)<module>()->None
-v dis.dis(sum)
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb)
Профиль модуля
Модуль профиля - это стандартный профилировщик Python. Вы можете запустить профилировщик из командной строки -
пример
Давайте попробуем профилировать следующую программу -
#!/usr/bin/python
vara = 10
varb = 20
sum = vara + varb
print "vara + varb = %d" % sum
Теперь попробуйте бежать cProfile.pyнад этим файлом sum.py следующим образом -
$cProfile.py sum.py
vara + varb = 30
4 function calls in 0.000 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 sum.py:3(<module>)
1 0.000 0.000 0.000 0.000 {execfile}
1 0.000 0.000 0.000 0.000 {method ......}
Tabnanny Модуль
Модуль tabnanny проверяет исходные файлы Python на предмет неоднозначного отступа. Если в файле табуляции и пробелы смешаны таким образом, что возникают отступы, независимо от того, какой размер табуляции вы используете, няня жалуется:
пример
Давайте попробуем профилировать следующую программу -
#!/usr/bin/python
vara = 10
varb = 20
sum = vara + varb
print "vara + varb = %d" % sum
Если вы попробуете правильный файл с tabnanny.py, он не будет жаловаться на следующее:
$tabnanny.py -v sum.py
'sum.py': Clean bill of health.