Учебники

Python Инструменты / Утилиты

Стандартная библиотека поставляется с рядом модулей, которые можно использовать как в качестве модулей, так и в качестве утилит командной строки.

Дис Модуль

Модуль 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, он не будет жаловаться следующим образом: