Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Aller à la page:  1 2 Page suivante
Page: 1 sur 2
Mes débuts sous Python
Envoyé par: Sve@r

Hello à tous, beaucoup me connaissent par mes scripts shells qui font toujours sensation quand je les donne ici.
Mais là, je me suis mis à apprendre Python à partit d'un tutoriel assez bien fait et assez complet (390 pages, écrit par Gérard Swinnen, téléchargé ici [www.ulg.ac.be]).

Ce tuto est bien rempli. Il présente les listes, les tuples, les dictionnaires (ça c'est super !!!), les classes, l'IHM Tkinter, la bdd, les services réseaux, les thread et je m'éclate avec.

En revanche, il laisse quelques détails assez flous donc les voici en vrac
1) apparemment, "&&" et "||" ne sont pas connus dans les "if". Exact ?
2) switch/case n'existe pas, ni les mots clefs true/false (ah, l'habitude du php :-))
3) pas de "define" (évidemment, il n'y a même pas de préprocesseur)
4) l'opérateur ternaire "bool ?v1 :v2" me manque. Existe-t-il ?

Maintenant, quelques questions plus ardues
1) existe-t-il des constantes de classes ?
2) dommage de devoir toujours définir ses méthodes avec le paramètre "self". Python n'est-il pas capable de voir qu'une méthode définie dans une classe est forcément méthode de cette classe ???
3) apparemment, binder un widget avec une fonction ne permet pas de passer à la fonction un paramètre quelconque. Exemple: si j'ai 4 boutons de déplacement, je suis obligé de binder chaque bouton à une fonction dédiée à un déplacement dans une direction particulière. Je peux pas binder les 4 boutons à une seule et même fonction avec un paramètre particulier indiquant quel déplacement je fais
4) Bon, j'ai vu que les fonctions avaient accès en lecture aux variables de base (mais heureusement pas en écriture !!!)
Exemple
#!/usr/bin/python 
def toto(): 
____print a 
 
a=10 
toto()

Le pb, c'est que si je sors "toto" dans un module externe que j'importe, il ne connait plus "a"
Exemple: fichier "toto.py"
#!/usr/bin/python 
def toto(): 
____print a
Fichier "main.py"
from toto import * 
a=10
toto()
Où est l'erreur ???

5) Je suis tombé sur un exemple qui fait bouger une balle en suivant le bord interne d'un carré
from Tkinter import * 
# définition des gestionnaires 
# d'événements : 
def move(): 
____"déplacement de la balle" 
____global x1, y1, dx, dy, flag 
____x1, y1 = x1 +dx, y1 + dy 
____if x1 >210: 
________x1, dx, dy = 210, 0, 15 
____if y1 >210: 
________y1, dx, dy = 210, -15, 0 
____if x1 <10: 
________x1, dx, dy = 10, 0, -15 
____if y1 <10: 
________y1, dx, dy = 10, 15, 0 
____can1.coords(oval1,x1,y1,x1+30,y1+30) 
____if flag >0: 
________fen1.after(50,move) # => boucler après 50 millisecondes 
 
def stop_it(): 
____"arret de l'animation" 
____global flag 
____flag =0 
 
def start_it(): 
____"démarrage de l'animation" 
____global flag 
____if flag ==0: # pour ne lancer qu'une seule boucle 
________flag =1 
________move() 
 
#========== Programme principal ============= 
# les variables suivantes seront utilisées de manière globale : 
x1, y1 = 10, 10 # coordonnées initiales 
dx, dy = 15, 0 # 'pas' du déplacement 
flag =0 # commutateur 
 
# Création du widget principal ("parent" ) : 
fen1 = Tk() 
fen1.title("Exercice d'animation avec Tkinter" ) 
 
# création des widgets "enfants" : 
can1 = Canvas(fen1,bg='dark grey',height=250, width=250) 
can1.pack(side=LEFT, padx =5, pady =5) 
oval1 = can1.create_oval(x1, y1, x1+30, y1+30, width=2, fill='red') 
bou1 = Button(fen1,text='Quitter', width =8, command=fen1.quit) 
bou1.pack(side=BOTTOM) 
bou2 = Button(fen1, text='Démarrer', width =8, command=start_it) 
bou2.pack() 
bou3 = Button(fen1, text='Arrêter', width =8, command=stop_it) 
bou3.pack() 
 
# démarrage du réceptionnaire d'évènements (boucle principale) : 
fen1.mainloop()

Dans ce programme, l'auteur semble trouver génial que la fonction "move" (qui sert à faire bouger la balle d'un cran dans une direction) s'appelle elle-même en récursivité dans l'instruction "after(50, move)" et fasse ainsi avancer la balle à l'infini, chaque mouvement se passant 50 ms après le précédent.
Moi, quand on me parle "récursif", tout de suite je suis méfiant. Récursif implique empilement du contexte et du récursif à l'infini c'est le top pour faire planter un programme (essayons le classique "while (1) fork()" ).
Ben apparemment, le script ci-dessus marche bien. J'ai laissé tourner le truc et ça tourne sans problème. Et là, je ne comprends pas.
Surtout que j'ai ensuite remplacé le "after(50, move)" par un simple "move()" et là, ça a planté au bout de 1000 appels (j'ai intégré un compteur).
Quelqu'un peux-t-il expliquer la différence entre "after(50, move)" et "move()" ???

Voilà un résumé de mes affres de débutant Python...

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Tuesday 27 June 2006 20:00:33
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: tuxfanch

1) && -> and || -> or
2) switch n'existe pas car il ne présente aucun intérêt en python, une série de if fait bien l'affaire. true et false n'existent pas mais True et False existent (c'est la majuscule qui tue)
3) bah oui forcément ... ;-)
4) tu peux t'en sortir avec les fonctions lambda mais ça ralentit le code, le complexifie inutilement. Bref, c'est le bordel : à éviter (je sais, je sais, moi aussi je l'aimait bien cet opérateur en C)

1A) Je pense que oui, mais je suis pas sûr de bien voir ce que tu veux.
2A) Je me lamentait du contraire hier avec du QT/Cxx. Bah non, faut toujours mettre self, et personnellement je trouve ça pratique et bienvenu.
3A) ah bah ouais mais bon, c'est du TkInter je suppose. J'aime pas TkInter. Désolé, je n'ai pas de réponse à ça (PyQT c'est ouachement mieux)
4A) c'est normal ! tu te rend compte que dans toto, tu fais appel à une variable totalement inconnue ! tu peux faire ça :
toto.py
#!/usr/bin/env python
a = 10
def toto():
____print a

main.py
#!/usr/bin/env python
import toto

toto.a = 5
toto.toto()

5A) ça m'a tout l'air d'être spécifique à TkInter, désolé. Python limite à jenesaispluscombien le nombre d'appels récursifs pour justement éviter le plantage de type forkbomb.

Have fun !



------- <br />
La meilleure façon de prédire le futur, c'est de l'inventer ~ Alan Kay

Poste le Wednesday 28 June 2006 14:08:11
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: Sve@r

Citation
tuxfanch
1A) Je pense que oui, mais je suis pas sûr de bienvoir ce que tu veux.
Ben en C++, ce serait un membre de la classe mis en "static" (une seule et unique variable pour toutes les instances de la classe)
Ex (C++):
class xxx {
____static int v;
};
xxx::v=10;

Citation
tuxfanch
2A) Je me lamentait du contraire hier avec du QT/Cxx. Bah non, faut toujours mettre self, et personnellement je trouve ça pratique et bienvenu.
En ce qui concerne le "self", en C++ ou en PHP c'est une variable qu'on n'a jamais à déclarer car c'est implicite (donc évident pour le programmeur qui n'a pas à s'embêter). Bon, on n'en parle plus. Puisqu'il le faut je m'adapte et puis c'est tout.

Citation
tuxfanch
3A) ah bah ouais mais bon, c'est du TkInter je
suppose. J'aime pas TkInter. Désolé, je n'ai pas
de réponse à ça (PyQT c'est ouachement mieux)
J'ai déjà bossé avec C++/QT. T'as un tuto sur PyQT ???

Citation
tuxfanch
4A) c'est normal ! tu te rend compte que dans
toto, tu fais appel à une variable totalement
inconnue ! tu peux faire ça :
toto.py
#!/usr/bin/env python
a = 10
def toto():
____print a

main.py
#!/usr/bin/env python
import toto

toto.a = 5
toto.toto()
Je comprends le principe mais cela ne me satisfait que moyennement parce que ici
def toto():
____print a

def titi():
____print a

a=10
toto()
titi()
Ca marche bien si "toto()" et "titi()" sont définies dans le source. Mais si je déporte chaque fonction dans un fichier à part et que j'importe chaque fichier dans le source principal, "a" n'est pas connu. En réalité, ce qui me gène, c'est que "normallement" (dans un monde parfait), déporter une fonction à l'extèrieur d'un programme ne devrait pas avoir d'incidence sur la façon dont fonctionne le programme. Apparemment, en Python, ce n'est pas le cas...

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Wednesday 28 June 2006 22:08:20
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: tuxfanch

1A) Alors ok, tu peux faire ça :
toto.py
#!/usr/bin/env python

valeur = 0

def set_valeur(int pin_val):
____global valeur
____valeur = pin_val

def get_valeur():
____global valeur
____return(valeur)

ok, toto n'est pas une classe ; mais ça devrait fonctionner aussi bien dans une classe (du moment que valeur est définie en dehors de la classe).

3A) euh .. je retrouve plus le tuto que j'avais à l'époque. Bon, va falloir que j'en écrive un. Si tu veux, je dois avoir chez moi des bouts de codes qui trainent. Je peux te mailer ça sans souci. Avec le QTAssistant en C++, il est très facile de retrouver le pendant pyQT, si t'as déjà codé en QT/C++, tu vas te régaler !

4A) Oué, ça marche tant que tout est défini dans le même module. De mémoire, c'est comme les namespaces.
Je vois bien qu'elles te manquent ces saloperies de variables globales. Si si, moi aussi je code sur une appli en C, je vois très bien où tu veux en venir ! hmmm .... il faut juste un petit extern dans le header et en voiture simone ... bah pense à moi : j'ai plus de 800 variables globales dans un peu plus d'une centaine de *.c et autant de *.h donc Je souffre atrocement de ces @#%! de fonctions qui mettent à jour une pagaille de variables globales n'importe où et n'importe comment.
Alors Python c'est du bonheur : du code qu'on comprend comme on lit le journal ! aaaaaah (je sais, le C bien écrit se comprend très facilement, même sans commentaires. Mais le C bien écrit, c'est comme le père Noël)



------- <br />
La meilleure façon de prédire le futur, c'est de l'inventer ~ Alan Kay

Poste le Thursday 29 June 2006 08:56:50
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: Sve@r

Citation
tuxfanch
Je vois bien qu'elles te manquent ces saloperies de variables globales. Si si, moi aussi je code sur une appli en C, je vois très bien où tu veux
en venir ! hmmm .... il faut juste un petit extern
dans le header et en voiture simone ... bah pense
à moi : j'ai plus de 800 variables globales dans
un peu plus d'une centaine de *.c et autant de *.h
donc Je souffre atrocement de ces de fonctions
qui mettent à jour une pagaille de variables
globales n'importe où et n'importe comment.
Alors Python c'est du bonheur : du code qu'on
comprend comme on lit le journal ! aaaaaah (je
sais, le C bien écrit se comprend très facilement,
même sans commentaires. Mais le C bien écrit,
c'est comme le père Noël)
Tu fais une grosse erreur... car j'ai horreur des globales.
Mais là, ce n'est pas pareil. Les fct Python n'ont accès qu'en lecture aux variables donc plus de soucis de modif inconsidérée. Mon seul pb était de comprendre pourquoi dans un cas ça marche et pas dans l'autre.

Sinon, j'ai trouvé une solution que j'espère élégante pour avoir mes #define !!!
Exemple C
#define VAL_IN      0x01 
#define VAL_OUT     0x02 
#define VAL_OVER    0x03 
 
int f(...) 
{ 
____if (...) return VAL_IN; 
____if (...) return VAL_OUT; 
____return VAL_OVER; 
} 
 
main() 
{ 
____switch(f(...)) 
____{ 
________case VAL_IN: 
____________<...a...> 
________case VAL_OUT: 
____________<...b...> 
________case VAL_OVER: 
____________<...c...> 
____} 
}

Solution Python
define={ 
____"val" : { "in" : 0x01, "out" : 0x02, "over" : 0x03}
____# Eventuellement d'autres macro à suivre... 
} 
 
def f(...): 
____if ...: 
________return define["val"]["in"] 
____if ...: 
________return define["val"]["out"] 
____return define["val"]["over"] 
 
if f() == define["val"]["in"]: 
____<...a...> 
elif f() == define["val"]["out"]: 
____<...b...> 
elif f() == define["val"]["over"]: 
____<...c...>

Joli non ???

Citation
tuxfanch
Mais le C bien écrit, c'est comme le père Noël
=> [fr.lang.free.fr]

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Thursday 29 June 2006 19:25:34
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: tuxfanch

moi aussi j'ai horreur des globales. Je hais ces immondices.

ouaich c'est joli et pratique. Pour ma part, je fais parfois des modules de constantes que j'importe via "import machin" du coup, ça revient au même (sauf peut-être dans la mémoire, mais je n'ai jamais creusé là dessus).

pour le C, sisi, je confirme ce que j'ai dit : mon projet est dans le monde industriel depuis 20 ans, il a connu plusieurs dizaines de développeurs, pas tous bons ... donc au mieux, on peut distinguer des parties dont on devine qu'elles furent un jour bien écrites.



------- <br />
La meilleure façon de prédire le futur, c'est de l'inventer ~ Alan Kay

Poste le Thursday 29 June 2006 20:04:23
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: AlSim

Pour le 5, je n'ai jamais trop aimé le after(50, move) de cet example ...
Pour la limite de récursion, elle est il me semble de 1000 itérations par défaut, mais heureusement réglable (et souvent trop basse) :

from sys import setrecursionlimit
setrecursionlimit(10000)

[catwell.info]

Poste le Thursday 29 June 2006 23:46:54
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: Sve@r

Citation
AlSim
Pour le 5, je n'ai jamais trop aimé le after(50,
move) de cet exemple ...
Ben justement, j'aimerais comprendre pourquoi cela fonctionne sans pb de récursion...

Citation
AlSim
Pour la limite de récursion, elle est il me semble de 1000 itérations par défaut, mais heureusement réglable (et souvent trop basse) :
from sys import setrecursionlimit
setrecursionlimit(10000)
Ben oui mais cela ne change rien au pb...


L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Friday 30 June 2006 18:34:03
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: miguel2i

C'est pas de la récursivité, move ne s'appele pas directement.

Comme tout les Tk, Qt, Gtk, et autres, il y a une fonction d'attente d'événnements (que j'appelerais ici main_loop).

main_loop appele la fonction move (quand on clique sur le bouton start)
move ajoute un évènnement à la fonction main_loop
Quand l'évènnement arrive, main_loop appele move

Quand le deuxième move est appelé le premier move est terminé depuis longtemps.

> 4) l'opérateur ternaire "bool ?v1 :v2" me manque. Existe-t-il ?
- bool and v1 or v2
- toto={True: v1, False: v2}
toto[bool]


Poste le Friday 30 June 2006 18:39:46
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: AlSim

Pour le main_loop, je ne connais pas TK mais ça fonctionne aussi comme ça en SDL, sauf que c'est plus apparent à la lecture du code.
Quand je dis que je n'aime pas le after(50,move), c'est parce que ça me fait trop penser à une sorte de goto, j'aurais préféré une structure itérative ici.

Je n'ai pas python sous la main, mais je pense que bool and v1 or v2 ne remplace bool ?v1 :v2 que dans le cas où v1 et v2 sont eux-mêmes des booléens, puisque cette syntaxe renverra toujours des booléens. Il faudrait alors utiliser bool and a=v1 or a=v2, ce qui perd un peu d'intéret.

Je suppose qu'on doit pouvoir utiliser un truc dans le genre [v2,v2][int(bool)], ou alors une fonction lambda (gros avantage de Python à mon avis).

[catwell.info]

Poste le Friday 30 June 2006 21:14:57
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: AlSim

Oups, je voulais dire [v2,v1][int(bool)] bien sûr ...

[catwell.info]

Poste le Friday 30 June 2006 21:16:06
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: Sve@r

Citation
AlSim
Quand je dis que je n'aime pas le after(50,move),
c'est parce que ça me fait trop penser à une sorte
de goto, j'aurais préféré une structure itérative
ici.
C'est aussi la même impression pour moi. Si j'avais dû écrire ce truc, j'aurais aussi écrit une itération. Mais l'exemple était justement fait pour montrer un exemple de ce fameux "after(..., ...)"
Citation
miguel2i
C'est pas de la récursivité, move ne s'appele pas directement.

Comme tout les Tk, Qt, Gtk, et autres, il y a une
fonction d'attente d'événnements (que j'appelerais
ici main_loop).

main_loop appele la fonction move (quand on clique
sur le bouton start)
move ajoute un évènnement à la fonction main_loop
Quand l'évènnement arrive, main_loop appele move

Quand le deuxième move est appelé le premier move
est terminé depuis longtemps.
Ok, là cela devient beaucoup plus clair. C'est comme une fonction "signal()" en C qui arme une fonction de déroutement pour réception d'un signal. Et, en général, dans la fonction de déroutement, on réarme de nouveau un appel à soi-même pour préparer la réception d'un nouveau signal. Merci de ta réponse.



L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Saturday 1 July 2006 20:03:14
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: miguel2i

Citation
AlSim
Je n'ai pas python sous la main, mais je pense que
bool and v1 or v2 ne remplace bool ?v1 :v2 que
dans le cas où v1 et v2 sont eux-mêmes des
booléens, puisque cette syntaxe renverra toujours
des booléens. Il faudrait alors utiliser bool and
a=v1 or a=v2, ce qui perd un peu d'intéret.

Non, en fait, v1 et v2 peuvent être autre chose que des booléens.
La seule condition est que v1 soit Vrai ( pas False, "", (), [] )

[diveintopython.adrahon.org]

Poste le Sunday 2 July 2006 10:55:24
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: AlSim

Oui, ça marche ... Je pensais que les opérateurs and et or renvoyaient un booléen, mais je me trompais.

[catwell.info]

Poste le Sunday 2 July 2006 11:03:14
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: tuxfanch

Citation
miguel2i
bool and v1 or v2

ah pas con, ça ne m'avais jamais traversé l'esprit :-/



------- <br />
La meilleure façon de prédire le futur, c'est de l'inventer ~ Alan Kay

Poste le Sunday 2 July 2006 12:01:38
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: Starcom

Citation
miguel2i
C'est pas de la récursivité, move ne s'appele pas
directement.

Comme tout les Tk, Qt, Gtk, et autres, il y a une
fonction d'attente d'événnements (que j'appelerais
ici main_loop).

main_loop appele la fonction move (quand on clique
sur le bouton start)
move ajoute un évènnement à la fonction main_loop
Quand l'évènnement arrive, main_loop appele move

Quand le deuxième move est appelé le premier move
est terminé depuis longtemps.

Je ne suis pas d'accord, ou plutôt je ne comprends pas:
le "fen1.after(50,move)" est bien dans la fonction move elle même.
L'appel au move suivant va donc bien se produire alors qu'on est pas encore sorti de la fonction move précédente... Donc on est bien en présence de récursivité.

Je ne vois pas ce qui te fais dire que le premier move est terminé.

Poste le Wednesday 12 July 2006 14:27:30
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: AlSim

Si je comprends bien moi-même, fen1.after(50,move) ne lance pas move : ça met un évènement "lancement de loop" en queue dans la boucle principale du widget fen1. Puis, comme il n'y a plus d'instructions, le premier move se termine. 50 ms plus tard, l'évènement se déclanche et appelle move à nouveau, et ce n'est pas move s'appelle elle-même mais bien la boucle principale.

[catwell.info]

Poste le Wednesday 12 July 2006 15:14:57
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: Sve@r

Citation
AlSim
Si je comprends bien moi-même, fen1.after(50,move)
ne lance pas move : ça met un évènement "lancement
de loop" en queue dans la boucle principale du
widget fen1. Puis, comme il n'y a plus
d'instructions, le premier move se termine. 50 ms
plus tard, l'évènement se déclanche et appelle
move à nouveau, et ce n'est pas move s'appelle
elle-même mais bien la boucle principale.

Ca ressemble aussi aux mécanisme signal/kill qui permettent, en C, d'attrapper un signal "s".

Lorsque la fonction est appelée à la réception dudit signal, il y a désarmement de l'appel et si le pgm reçoit de nouveau le signal "s", il ne le traite plus. Pour pallier à ça, il faut que la fonction se réarme elle-même lors de son appel

// Fonction qui est appelée lors d'un signal s
xxx(int s)
{
....// Elle se réarme en cas de nouveau signal
....signal(s, xxx);

....// Code utile
....<...>
}

int main()
{
....// On prépare l'appel à "xxx" en cas de signal 15
....signal(15, xxx);

....// Code principal
....<...>
}

Si un débutant C regarde ce code, il croira voir un appel récursif de "xxx()" vers "xxx()". Alors qu'en fait, la fonction "xxx" ne fait que mettre son adresse d'exécution dans une case particulière qui ne sera activée que si le pgm reçoit de nouveau le signal "s".

Ca doit être la même chose avec ce "after(50, move)"...

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Wednesday 12 July 2006 19:24:11
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: miguel2i

Ca ressemble aux signaux sauf qu'ici on sait quand la fonction est appelé.

signaux : interrompt le programme à n'importe quel momment, dans toutes fonctions, entre deux instructions
callback : appelé par main_loop "quand il a le temps". Si le programme est bloqué un momment, il appelera les fonctions plus tard. (on peux essayer en mettant un sleep de quelques secondes à la fin de start_it)

la fonction after est une minuterie (appele la fonctin xxx dans x secondes)
la fonction mainloop serais de la forme:

mainloop() 
boucle infini:
si un évenement souris est survenu
    si un boutton a été cliqué
        appeler la fonction associé (callback)
    (donc dans notre cas)
    si le boutton start a été cliqué 
        appeler start_it()
    si le boutton stop a été cliqué
        appeler stop_it()
si il y a des minuteries
   si une minuterie est dépassé
      appeler la fonction associé
   (dans notre cas)
   si la minuterie appelée dans move() est dépassé
     appeler move()
si l'evenement "fermer la fenetre" est survenu
    quitter la boucle
si un évenement clavier est survenu
   ...
si autres evenements 
    ...
fin de boucle infini

On pourrais ajouter une minuterie qui arrête l'animation 10 secondes plus tard.

Poste le Thursday 13 July 2006 18:55:51
Répondre     Citer    
Re: Mes débuts sous Python
Envoyé par: Sve@r

Citation
miguel2i
Ca ressemble aux signaux sauf qu'ici on sait quand
la fonction est appelée.
la fonction after est une minuterie (appele la
fonction xxx dans x secondes)
Oui, on peut avoir un équivalent en C avec "alarm(x)" qui envoie un signal "SIGALRM" au bout de "x" secondes.
Associé avec un "signal(SIGALRM, move)", on obtiendrait un mécanisme qui ressemble fortement à ce fameux "after(x, move)" de Python.

Sinon j'ai découvert l'instruction "yield". Quelle révolution !!! Cette instruction m'a totalement sciée...

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Thursday 13 July 2006 19:21:59
Répondre     Citer    
Aller à la page:  1 2 Page suivante
Page: 1 sur 2

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Mes débuts sous Python
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.
Nouveau sujet sur ce forum

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons