Příkazová řádka Pythonu alias shell alias konsole alias >>> je neobyčejně silná feature (součást) 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í.
Tipy pro >>>
Příkazová řádka Pythonu alias shell alias konsole alias >>> je neobyčejně silná feature (součást) 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']
>>> znamky.count(1)
3
dir() je funkce, která nám řekne o všech metodách, které má objekt v závorce. V našem případě tedy metody seznamu. Ty obyčejné (append, count,...) jsou až na konci. Ty, které mají dvě podtržítka (__) na začátku a na konci jsou systémové speciální metody, které se takto jak jsou sice dají použít, ale většinou se používají jinak, příjemněji:
>>> znamky.__add__([8])
[1, 1, 1, 3, 4, 8, 8]
>>> znamky + [8]
[1, 1, 1, 3, 4, 8, 8]
>>> znamky.__len__()
6
>>> len(znamky)
6
>>>
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. V ukázce také ukazuji konkrétní práci s jednou funkcí modulu time, kterou jsem tímto způsobem našel:
>>> 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:
x=10
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]
>>> x
10
>>> 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....