Petit mémento à usage des débutants en Python pour mieux comprendre l’usage des variables globales.
#! /usr/bin/python
# -*- coding: utf-8 -*-
a = [1 , 2 , 3]
"""la variable est définie dans l'espace de nom du module/script.
C'est une variale globale."""
def lecture_et_modification() :
print "a:", a
"""retourne: 'a: [1, 2, 3, 4]'
Nous sommes dans une fonction et nous voulons afficher la variable "a".
Puisque la variable n'est pas été définie préalablement dans l'espace de nom
de la fonction, c'est la variable globale qui est affichée."""
a.append(4)
a[0] = "hoho"
"""On peut modifier une variable globale directement.
Comme la variable "a" n'est pas définie dans l'espace de nom de la fonction,
c'est la variable globale est est modifiée"""
lecture_et_modification()
print "a:", a
"""retourne: 'a: ['hoho', 2, 3, 4]'"""
def creation() :
global a
"""Cette ligne indique que la référence au nom de variable "a" doit se faire
dans l'espace de nom global du script/module et non de la fonction"""
a = 5
"""Ici, on ne modifie plus mais on crée ou re-crée la variable
Que la variable "a" existe préalablement ou pas ne change rien.
Si on n'écrit pas la ligne au dessus ("global a"), la variable "a"
sera une variable locale de la fonction,
ce qui n'est pas le comportement désiré ici."""
a += 5
"""Cette syntaxe pourrait à priori faire penser à une modification
mais il s'agit en fait du raccourci pour 'a = a + 5'.
Il s'agit donc là là aussi d'une création de variable. Il faut donc
préalablement déclarer "global a" si on veut que la variable soit créée
dans l'espace global de noms"""
creation()
print "a:", a
"retourne 'a: 10'"""
J’ai juste envie de dire « WTFOMGBBQ » quand je vois des billets comme ça.
Les globals c’est moche, pas intuitif et sale !
Je vois même pas comment t’es venue l’idée d’écrire ça.