Tipy pro >>>

Příkazová řádka Pythonu alias command line alias komand lajna alias shell alias konsole alias >>> je neobyčejně silná feature Pythonu. Můžeme na ní zkoušet vše, co v obyčejném programu, některé věci však daleko výhodněji. Můžeme tomu říkat "hraní si" s Pythonem, případně ladění.

Jaké všechny metody má můj objekt?

V Pythonu je objekt vše - číslo, řetězec, moduly, funkce, seznamy, ... Zastavme se třeba u seznamů. Pokud chceme vědět, co všechno můžeme se seznamem dělat, tj. jaké má všechny metody, můžeme se podívat do manuálu nebo si s ním pohrát na příkazovém řádku. Vyzkoušejte:

  >>> znamky=[1,1,3,1,4,8]
  >>> dir(znamky)
  ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
  ce__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gets
  lice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '
  __le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__r
  educe_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__
  ', '__setslice__', '__str__', 'append', 'count', 'extend', 'index', 'insert', 'p
  op', 'remove', 'reverse', 'sort']

Všechny se dají použít způsobem: za znamky bude tečka a za tečkou jméno metody se závorkami s potřebnými parametry:

  >>> znamky.append(1)
  >>> znamky.count(1)
  4
  >>> znamky.index(8)
  5
  >>> znamky.sort()
  >>> znamky
  [1, 1, 1, 1, 3, 4, 8]

Ještě jedna ukázka na řetězce:

  >>> mesto="Praha"
  >>> dir(mesto)
  ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
  ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__g
  t__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__
  ', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '
  __rmul__', '__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode',
  'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdi
  git', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lst
  rip', 'replace', 'rfind', 'rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'split
  lines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill
  ']

Jaké všechny proměnné jsem použil?

Funkce dir() se dá použít i pro zjištění, které všechny proměnné, funkce nebo i moduly jsem doposud použil. Je zde ukázáno i praktické použití zjištěné funkce modulu time:

  >>> x=10
  >>> jmeno="John"
  >>> import time
  >>> boat=["one", "two", 3,"four"]
  >>> dir()
  ['__builtins__', '__doc__', '__name__', 'boat', 'jmeno', 'time', 'x']
  >>> time
  <module 'time' (built-in)>
  >>> dir(time)
  ['__doc__', '__name__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime',
  'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 's
  truct_time', 'time', 'timezone', 'tzname']
  >>> dir(time.localtime)
  ['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__getattribute__
  ', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '_
  _reduce_ex__', '__repr__', '__self__', '__setattr__', '__str__']
  >>> time.localtime
  <built-in function localtime>
  >>> time.localtime()
  (2005, 10, 2, 11, 22, 49, 6, 275, 1)

Ladění

Hrátky na příkazovém řádku se dají využít i k ladění programu. Mějme následující program:

  kniha="HW a SW"
  posl=range(10)
  for i in posl:
      print i+kniha

Po jeho spuštění se objeví následující chybová hláška:

  Traceback (most recent call last):
    File "programujte.py", line 5, in ?
      print i+kniha
  TypeError: unsupported operand type(s) for +: 'int' and 'str'

A my můžeme začít zkoumat, a následně opravovat svůj program:

  >>> dir()
  ['__builtins__', '__doc__', '__file__', '__name__', 'i', 'kniha', 'posl', 'x']
  >>> kniha
  'HW a SW'
  >>> posl
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  >>> i
  0
  >>> kniha*i
  ''
  >>> kniha*7
  'HW a SWHW a SWHW a SWHW a SWHW a SWHW a SWHW a SW'
  >>>

Nápověda na příkazovém řádku

Často také dokážu zjistit i něco více, než jen pouhý výpis metod objektu. Jedná se v podstatě o velmi podobnou nápovědu, jako v manuálu, ale v textovém provedení:

  >>> x=[5,4,2]
  >>> help(x)
  Help on list object:

  class list(object)
   |  list() -> new list
   |  list(sequence) -> new list initialized from sequence's items
   |
   |  Methods defined here:
   |
   |  __add__(...)
   |      x.__add__(y) <==> x+y
   |

   [...]

   |  reverse(...)
   |      L.reverse() -- reverse *IN PLACE*
   |
   |  sort(...)
   |      L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
   |      cmp(x, y) -> -1, 0, 1
   |

   [...]

Extra

S výše uvedenými funkcemi dir() i help() můžete samozřejmě pracovat i v programu, takže si můžete vytvářet programy, které budou generovat metody vašich objektů nebo nápovědy k nim....

Závěr

Najdete-li něco zajímavého, co tu není, napište to sem.