Pages : 1
#1 Le 05/10/2022, à 12:41
- chris7522
[RESOLU] Variable Globale (python)
Bonjour a toutes et a tous ,
Je voudrai savoir si ma variable ' global clickable' (dont la valeur va pouvoir etre modifié) doit etre declaré au préalable a l' éxterieur de ma fonction ?
Voici le bout de code :
import pygame
pygame.init()
clock=pygame.time.Clock()
yellow=(255,255,0)
black=(0,0,0)
white=(255,255,255)
grey=(150,150,150)
green=(0,255,0)
alienimage=pygame.image.load('data/R11E.png')
first=True
second=False
third=False
fourth=False
fifth=False
def button(win,msg,x,y,w,h,itext,atext,col):
mouse = pygame.mouse.get_pos()
if msg=='Back to Title Screen':
size=20
w+=50
elif msg=='Pause':
size=20
elif msg=='Use':
size=15
else:
size=35
if x<mouse[0]<x+w and y<mouse[1]<y+h:
pygame.draw.rect(win,col,(x,y,w,h))
font1=pygame.font.SysFont('comicsansms',size)
text=font1.render(msg,1,atext)
win.blit(text, (round(x + (w/2 - text.get_width()/2)),round( y + (h/2 - text.get_height()/2))))
click=pygame.mouse.get_pressed()
[b]global clickable[/b]
if click[0]==1:
loop=True
while loop:
e=False
for event in pygame.event.get():
if event.type==pygame.MOUSEBUTTONUP:
e=True
if e:
return True
else:
return False
else:
pygame.draw.rect(win,col,(x,y,w,h),1)
font1=pygame.font.SysFont('comicsansms',size)
text=font1.render(msg,1,itext)
win.blit(text, (round(x + (w/2 - text.get_width()/2)),round( y + (h/2 - text.get_height()/2))))
font1=pygame.font.SysFont('comicsansms',20)
Dernière modification par chris7522 (Le 06/10/2022, à 14:25)
Hors ligne
#2 Le 05/10/2022, à 13:05
- Compte supprimé
Re : [RESOLU] Variable Globale (python)
Bonjour,
Pourquoi ne joues tu pas avec l'invite de commande pour voir ce qu'il en est?
>>> def truc():
global var
var = "yop"
>>> truc()
>>> print(var)
yop
>>>
#3 Le 05/10/2022, à 17:39
- chris7522
Re : [RESOLU] Variable Globale (python)
Je te remercie de ton aide . J'ai bien compris le fonctionnement de la variable globale mais est il obligatoire de la déclaré d'abord en dehors de la fonction ?
Je crois avoir des lacunes importantes dans ce domaine !
Hors ligne
#4 Le 05/10/2022, à 18:13
- iznobe
Re : [RESOLU] Variable Globale (python)
Bonsoir en general , je me rapelle plus trop pour python , mais lorsqu ' on declare une variable dans une fonction , elle ne peut pas etre globale .
c ' est ce qu ' on apelle la portée des variables .
si tu apelles une variable globale dans une fonction pas de probleme cela fonctionne ( declarée en dehors d' une fonction donc ) , par contre il ne faut pas la modifier ni la declarer dans une fonction .
ma_variable_globale = test
fonction () {
ma_variable_globale = ko
print ma_variable_globale # donnera : ko
}
print ma_variable_globale # donnera : test
source de confusion tres souvent donc a eviter a tout prix !
j ' ecris du pseudo code , c' est meme pas du python , mais le principe reste le meme ( en theorie ) .
Tu peux par contre demander a ta fonction de retourner une ou des variables standard , meme un tableau de variables si besoin .
il y a des cours sur le net pour ce genre de choses et des milliers d' exemple pour tous les langages
Dernière modification par iznobe (Le 05/10/2022, à 18:19)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#5 Le 05/10/2022, à 20:34
- pingouinux
Re : [RESOLU] Variable Globale (python)
Bonsoir,
Sans la déclaration global dans la fonction :
$ cat script1.py
var = 5
print('avant la fonction', var)
def f():
var = 7
print('dans la fonction', var)
f()
print('après la fonction', var)
$ python3 script1.py
avant la fonction 5
dans la fonction 7
après la fonction 5
Avec la déclaration global dans la fonction :
$ cat script2.py
var = 5
print('avant la fonction', var)
def f():
global var
var = 7
print('dans la fonction', var)
f()
print('après la fonction', var)
$ python3 script2.py
avant la fonction 5
dans la fonction 7
après la fonction 7
Hors ligne
#6 Le 06/10/2022, à 13:40
- chris7522
Re : [RESOLU] Variable Globale (python)
Merci beaucoup a tous les trois d'avoir pris la peine de me répondre et pour vos éclaircissements .
J'ai bien compris la portée des variables et la nécessité de faire précéder le nom de la variable par " global " pour que la valeur de celle-ci , si elle est modifié dans la fonction , puisse l'être aussi en dehors de cette fonction .
Le soucis dans le code que je vous ai proposé est que ma variable " global clickable " dans la fonction " def button () " n'est pas déclaré avant en dehors de la fonction . J'ai regardé du début du fichier ( import pygame ...) jusqu'à :
font1=pygame.font.SysFont('comicsansms',20) et je ne vois rien ...
Hors ligne
#7 Le 06/10/2022, à 13:59
- pingouinux
Re : [RESOLU] Variable Globale (python)
La variable n'a pas besoin d'être déclarée en dehors de la fonction, si tu ne l'utilises pas avant qu'elle soit définie.
$ cat script3.py
#var = 5
#print('avant la fonction', var)
def f():
global var
var = 7
print('dans la fonction', var)
f()
print('après la fonction', var)
$ python3 script3.py
dans la fonction 7
après la fonction 7
$ cat script4.py
#var = 5
#print('avant la fonction', var)
def f():
global var
# var = 7
print('dans la fonction', var)
f()
print('après la fonction', var)
$ python3 script4.py
Traceback (most recent call last):
File "/tmp/tst/script4.py", line 9, in <module>
f()
File "/tmp/tst/script4.py", line 7, in f
print('dans la fonction', var)
NameError: name 'var' is not defined. Did you mean: 'vars'?
Hors ligne
#8 Le 06/10/2022, à 14:24
- chris7522
Re : [RESOLU] Variable Globale (python)
Ok parfaitement claire !
Encore Merci !
Hors ligne
#9 Le 06/10/2022, à 20:36
- chris7522
Re : [RESOLU] Variable Globale (python)
Il y a quand même un truc pas super clair , dans le message d'erreur de ton dernier exemple, il dit que la variable " var" n'est pas définie , alors qu'elle a été déclarée : " global var" dans la fonction . Il a fallu que tu commente " var = 7 " , pour déclencher l'erreur .
Il faut absolument affecter une valeur a cette variable ?
Hors ligne
#10 Le 06/10/2022, à 20:43
- pingouinux
Re : [RESOLU] Variable Globale (python)
Pour utiliser la variable (dans le print), elle doit avoir une valeur (être définie). Le fait de la déclarer ne suffit pas.
Hors ligne
#11 Le 06/10/2022, à 20:57
- chris7522
Re : [RESOLU] Variable Globale (python)
Ok d'accord . Merci
Hors ligne
#12 Le 07/10/2022, à 06:27
- Compte supprimé
Re : [RESOLU] Variable Globale (python)
Précisons tout de même que l'usage de la commande global est à déconseiller.
Il est considéré comme étant une mauvaise pratique(évolution des variables difficile à suivre/ débug).
On utilisera plutôt return pour transmettre à l'espace global un objet défini dans une fonction, ou on utilisera des objets tel que list(), dict(), ...