Python: ouverture de fichier et fonction

Fermé
jooshig Messages postés 40 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 9 janvier 2008 - 11 févr. 2007 à 01:10
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 11 févr. 2007 à 23:06
bonjour,

J'ai defini une fonction qui lit les lignes (issues du web, donc en html) contenues dans un fichier html f pour les transferer sans les balises dans un fichier papyr:


def transfMessage():
...i=1
...while i==1:
......rd = f.readline() # lecture de ligne
......if rd[-8:-2] == '<br />': # <- detecte une ligne interne du message
.........rdc = rd[0:-8] # elimination du EOL
......if rd[-9:-1] =='<br><br>': # <- detecte la derniere ligne du message
.........rdc = rd[0:-9] # elimination du EOL
.........i=0 # traduit que le message a ete entierement lu
......papyr.write(rdc + '\n')


L'instruction rd=f.readline() effectue la declaration d'une variable rd en tant que variable locale circonscrite a la fonction transfMessage. Ce qui arrive a cette variable locale rd ne retentit pas sur la variable exterieure rd prealablement existante, je l'ai verifie.
Jusque la rien d'anormal. Cela respecte les notions de variables locales/variables globales.

Par contre, je suis intrigue par le fait que l'instruction papyr.write(rdc+'\n') realise bien l'envoi de la valeur de rdc vers le fichier papyr qui est un fichier exterieur a la fonction.
En effet, le fait que l'ecriture de la valeur de rdc est effectivement realisee dans le fichier exterieur papyr signifie pour moi que papyr n'est pas considere comme un truc local circonscrit a la fonction.
Or, il n'y a pas, dans la definition de la fonction, de ligne definissant papyr comme untruc global , grace a la declaration 'global'.

Donc....je suis perplexe. Les fichiers sont ils une exception ? Sont-ils des trucs consideres comme globaux partout dans un programme meme si on ne les declare pas explicitement comme tels ?

merci d'avance pour toute reponse

1 réponse

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 févr. 2007 à 23:06
Salut,

Je viens de faire ce test:
a=1

def test():
        print a

test()

Et ça m'affiche "1".

Il semblerait que lorsqu'une fonction tombre sur une nouvelle variable, elle va lachercher dans sa portée locale. Si elle n''y est pas, elle la cherchera dans la portée globale.

Par contre ceci ne fonctionnera pas:
def f1():
        a=1
        f2()

def f2():
        print a

f1()

Car, pour f2, a n'est plus dans une portée globale mais dans une portée locale en amont....
0