Стандартная библиотека поставляется с рядом модулей, которые можно использовать как в качестве модулей, так и в качестве утилит командной строки.
Дис Модуль
Модуль 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 , установите правильный путь к каталогу lib Python. Итак, давайте попробуем с приведенным выше примером 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 ......}
Табнанный Модуль
Табнанный модуль проверяет исходные файлы Python на наличие неоднозначных отступов. Если файл смешивает вкладки и пробелы таким образом, что отбрасывает отступы, независимо от того, какой размер вкладки вы используете, няня жалуется —
пример
Давайте попробуем профилировать следующую программу —
#!/usr/bin/python vara = 10 varb = 20 sum = vara + varb print "vara + varb = %d" % sum
Если вы попробуете правильный файл с tabnanny.py, он не будет жаловаться следующим образом: