L’intèrpret de Python, modes de treball

Conceptes

  • Treball en mode shell

  • Treball en mode script

Treball en mode shell

Mode de treball adequat per fer petits experiments.

Per entrar a la shell de Python cal prémer la comanda python3:

nom@cognom:~/fi/sessio1$ python3

Entrem a la shell de Python tal com ens informen les línies següents i aquesta ens mostra el seu prompt consistent en 3 símbols de més gran, >>>:

Python 3.2.3 (default, Feb 27 2014, 21:31:18) <br>
[GCC 4.6.3] on linux2<br>
Type "help", "copyright", "credits" or "license" for more information.<br>
>>>

Ara podem entrar el nostre programa línia a línia:

>>> radi = 6
>>> àreacercle = radi * 2 * 3.14
>>> print(àreacercle)
37.68
>>>

Per fer una nova versió del programa, podem recuperar una línia usant la tecla amb la fletxa cap amunt. Pel següent exemple s’han recuperat les línies 2, 3 i 4.

>>> import math
>>> radi = 6
>>> àreacercle = radi * 2 * math.pi
>>> print(àreacercle)
37.69911184307752
>>>

Per sortir de la shell, cal prémer les tecles Ctrl D. Aleshores torna a sortir el prompt del sistema operatiu.

nom@cognom:~/fi/sessio1$

A continuació es mostra la seqüència de línies que veuríem a la terminal per l’exemple anterior.

nom@cognom:~/fi/sessio1$ python3
Python 3.2.3 (default, Feb 27 2014, 21:31:18)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> radi = 6
>>> àreacercle = radi * 2 * 3.14
>>> print(àreacercle)
37.68
>>> import math
>>> radi = 6
>>> àreacercle = radi * 2 * math.pi
>>> print(àreacercle)
37.69911184307752
>>>
nom@cognom:~/fi/sessio1$

També podem fer dissenys que requereixin indentar, usant la tecla Tab:

>>> def divent (num, den):
...     if den == 0:
...             return 'error'
...     else:
...             return num//den, num%den
...
>>> divent(17,5)
(3, 2)
>>> divent(17,0)
'error'
>>>

Treball en mode script

És el mode habitual de treball. Editem el programa amb l’entorn de treball idle o amb algun altre editor.

nom@cognom:~/fi/sessio1$ idle p1.py &

A dins del fitxer hi escrivim el contingut següent:

import math
radi = 6
àreacercle = radi * 2 * math.pi
print(àreacercle)

Executem el programa p1.py:

nom@cognom:~/fi/sessio1$python3 p1.py <br>
37.69911184307752

Quan el disseny correspon a una funció, podem executar-la en mode shell o be escrivint el programa principal que la crida o bé amb l’eina doctest que es veurà més endavant.

Exemple:

Editem la funció següent amb l’editor emacs:

nom@cognom:~/fi/sessio1$idle p2.py &

A dins del fitxer hi copiem el contingut següent:

def divent (num, den):
    if den == 0:
        return 'error'
    else:
        return num//den, num%den

Per executar-la en mode shell:

nom@cognom:~/fi/sessio1$ python3 <br>
Python 3.2.3 (default, Feb 27 2014, 21:31:18) <br>
[GCC 4.6.3] on linux2<br>
Type "help", "copyright", "credits" or "license" for more information.
>>> import p2
>>> p2.divent(17,5)
(3, 2)
>>> p2.divent(17,0)
'error'
>>>
nom@cognom:~/fi/sessio1$

Per executar-la escrivint un programa principal ad hoc, cal modificar el contingut del fitxer p2.py:

def divent (num, den):
    if den == 0:
        return 'error'
    else:
        return num//den, num%den

# programa principal per executar la funció
print(divent(17,5))
print(divent(17,0))

i executar-lo:

nom@cognom:~/fi/sessio1$ python3 p2.py
(3, 2)
error

Per executar-la usant doctest, cal modificar el contingut del fitxer p2.py:

def divent (num, den):
    """
    >>> divent(17,5)
    (3, 2)
    >>> p2.divent(17,0)
    'error'
    """
    if den == 0:
        return 'error'
    else:
        return num//den, num%den

i executar-lo:

nom@cognom:~/fi/sessio1$ python3 -m doctest p2.py -v
Trying:
    divent(17,5)
Expecting:
    (3, 2)
ok
Trying:
    divent(17,0)
Expecting:
    'error'
ok
1 items had no tests:
    p2
1 items passed all tests:
   2 tests in p2.divent
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

Si el nombre de tests que es passen és llarg, serà convenient afegir la comanda more a fi que ens retorni la informació pantalla a pantalla.

S’executa com:

nom@cognom:~/fi/sessio1$ python3 -m doctest p2.py -v | more