Nouvelle section
2004/12/15 11:55
Juste: "pour mettre de quoi" "quand même bizarre le python" Vous: "ne trouvez vous pas?" "Indentez avec des tabulations, pfff.." Ahnon: "On peut aussi" "le faire avec des espaces" si: "on est cohérent un peu" "avec soi-même"
Documentation
Script python
Exécution
=========
#!/usr/bin/env python
#!/usr/bin/env python3.1
Le fichier a besoin des droits d'exécution (chmod +x fichier.py) pour être lancer sans le nom de l'interpréteur
./fichier.py
/chemin/complet/du/fichier.py
Note windows: si le fichier a l'extension .pyw, alors la fenêtre de console n'affichera pas.
Importation
===========
Importation de fichier (selon sys.path)
> import fichier
/var/lib/python-support/python2.5/fichier.so
ou
/var/lib/python-support/python2.5/fichier/__init__.py
ou
/usr/lib/python2.5/fichier.py
ou
./fichier.py
Importation d'un fichier dans un répertoire
> import repertoire.fichier
/var/lib/python-support/python2.5/repertoire/fichier.py
Importation d'une bibliothèque
> import sys
Il n'y a pas d'aide pour sys.
Importer une classe d'un fichier
> import fichier
> from fichier import ClassName
Importer toutes les fonctions d'un fichier
> from fichier import *
Importer une fonction et la renommer
> from fichier import functionName as aliasName
Note: l'importation de fonction peut se faire à l'intérieur de fonction ou de méthodes de classes
Commentaires
============
# tout ce qui est à droite du dièse sur cette ligne
Constantes
==========
Le principe n'existe pas (ce sont des variables), mais elles sont nommés en majuscule habituellement.
BLA="string"
Variables
=========
foo=1 # assigner l'entier 1 à la variable qui se nomme foo
bar = "1" # assigner une chaîne de caractère (string)
foobar = "1"
x = y = z = 1 # assigner trois variables en même temps l'entier 1
x,y = 1,2 # assigner 1 à x et 2 à y
Nombre:
...,-1,0,1,...
...,-1.1,0.0,1.1,....
1j,1J,complex(0, 1) : nombre imaginaire i
3+1j*3 = 3+3j
(3+1j)*3 = (9+3j)
z=1j
print (z.real) # give 0.0
print (z.imag) # give 1.0
Chaînes:
"chaine"
'chaine'
"chaine \"double-quote\"!"
'chaine \'single-quote\'!'
"multiline\
yes multiline\
sure"
"""
triple double-quote
don't need extra slash
or \n
"""
'''
triple single-quote
don't need extra slash
or \n
'''
raw string [aucune conversion]:
r"bla\n\
test"
Unicode:
'Hello\u0020World !' # \u code hexadécimal à 4 chiffres
Bytes:
Retournés par string.encode()
Listes:
-------
# Déclaration
a = []
b = [1,2,3,"a","b"]
# Accès
b[1]
[1,[2,3],4][1,0] # donne le premier élément du second élément, 2
# Modification
b[1] = 4
b[0:2] = [1,2]
# Suppression
b[0:2] = []
a[:] = []
Dictionnaire
------------
a = (1,2,3)
Fonctions
=========
Déclaration d'une fonction vide (à redéfinir):
nomFonction = lambda x: x
def nomFonction(*args):
pass
Affectation d'une fonction lambda:
nomFonction = nomFonction2
Définition:
def nomFonction (param):
global nomVariableGlobale
global nomFonctionLambda
# retour non obligatoire
return 1
# définition de paramètres optionnels (avec valeur par défaut)
def nomFonction (param1, param2='valeur1', param3='valeur3'):
instructions
# la valeur du paramètre optionnel n'est évalué qu'une seule fois et n'est pas remis à zéro
# une liste ou un objet seront modifiés
# exemple: a sera modifié à chaque appel nomFonction()
def nomFonction(a=[]):
a.append(1)
# note: une fonction qui ne retourne rien, retourne la valeur None
# note: on peut utilisé les noms des arguments lors de l'appel
# nomFonction(param3='bla', param1='a')
# *args : tuple des paramètres sans nom
def maFonctionArgs(*args, sep=","): # des paramètres optionels avec nom peuvent être présent après *args
print(sep.join(args))
# **args : dictionnaire des paramètres avec nom (mais non spécifié)
def maFonction(*bla, **foo):
for a in bla:
print(a, end=' ')
for b in foo: # b est la clé, foo[b] est la valeur
print(b, end=' ')
# maFonction("9", "8", "7", a="1", b="2", c="3") # affiche 9 8 7 a b c
Conditions
==========
if condition: instruction
if condition:
instruction1
instruction2
if condition:
instruction1
if condition2:
instruction2
if condition3:
instruction3:
instruction4
if condition1:
instruction1
elif condition2:
instruction2
elif condition3:
instruction3
else:
instruction4
Exemples:
if var != None:
print 1
if (string.endsWith("bla") or
string.endsWith("foo")):
print 1
elif string.endsWith("test"):
print 2
else:
print 3
if a > 1 and a < 10:
print a
Opérateurs
==========
Logique
-------
and # et logique
or # ou logique
Mathématique
------------
+ # addition d'entier ou de nombre à virgule
- # soustraction d'entier ou de nombre à virgule
* # multiplication d'entier ou de nombre à virgule
/ # division d'entier ou de nombre à virgule (virgule non perdue 1/3 = 0.3333333333333333, 0.3333333333333333*3 = 1.0)
// # division, garde l'entier seulement (1//3 = 0), il s'agit de la fonction plancher math.floor(1/3)
+ # addition d'entier ou de nombre à virgule
% # module (reste de la division) 11%3 = 2, car 11 = (3*3) + 2.
< # plus petit que
> # plus grand que
Chaîne
------
"a" + "b" # concaténation de chaîne (donne "ab")
"a" + "b" + "c" # concaténation de chaîne (donne "abc")
"a" "b" # concaténation de chaîne (donne "ab")
"a" "b" "c" # concaténation de chaîne (donne "abc")
"a" * 5 # répétition de chaîne (donne "aaaaa")
"a" in ("a", "b", "c") # test si "a" est dans la liste (retourne True/False)
"abc"[0] # donne le premier caractère "a"
"abc"[0:2] # donne les deux caractères à partir de l'index 0 (a) "ab"
"abc"[:2] # même chose
"abcd"[2:] # donne "cd", index 2 (c) et tout ce qui est après.
"abc"[-3] # donne le troisième caractère en partant de la fin, c (-1), b (-2), a (-3).
List
# Coupure
[1,2,3,4][:1]
[1,2,3,4][1:-1]
[1,2,3,4][1:]
[1,2] + [3,4] # [1,2,3,4] concaténation de liste
a = list[:] # copie d'une variable nommé "list" dans a
Tests
=====
if False: # est faux
if 0: # est faux
if "": # est faux
if []: # est faux
if None: # est faux
if True: # est vrai
if 1: # est vrai
if -1: # est vrai
if "0": # est vrai
if [0]: # est vrai
Boucles
=======
while condition:
instruction1
instruction2
while condition:
pass # retourne à la condition immédiatement (pour recommencer la boucle, instruction1 n'est pas appelé)
instruction1
for x in list:
print(x) # affiche chaque item
for x in range:
print(x) # affiche chaque élément de l'objet range
for x in string:
print(x) # affiche chaque caractère
# note: que la liste ne doit pas être changé... utilisé une copie list[:] si le besoin est là
Formatage
=========
"Bla bla bla %s %d %s" % ("allo", 5, "toi")
Exceptions
==========
try:
bla = "test %s" % None
except TypeError:
print ("Missing '%s')
pass
try:
n
except NameError:
print ("n is not declared")
try:
a = { "test1": 1, "test2": 3 };
b = a["test3"]
except KeyError:
print ("Bad key when getting b")
except e:
print ("e is the special exception object")
Lever une exception
raise IOError(string message)
Classes
=======
Déclaration d'une classe:
class NomClasse:
NOMCONSTANTE1=1
NOMCONSTANTE2=2
NOMCONSTANTE3="bla"
NOMCONSTANTE4={
cle="bla",
cle="bla2"
}
# accessible via self.NOMCONSTANTE3[cle]
# constructeur (self = la classe)
def __init__(self):
self.bla = 1 # initialisation de la variable interne bla
# constructeur avec 2 arguments
def __init__(self, arg1, arg2):
self.bla = arg1
# test d'égalité ==
def __cmp__(self, other)
# return -1 0 or 1 (if other is None, return 1)
# you can return the cmp(self.arg, other.arg)
# classe vide sans rien à l'intérieur
class ClasseVide:
pass
Héritage
========
# Le nom de la classe parente peut contenir des points (dbus.service.Object utilisera $PATH/dbus/service.py: classe Object)
class NomClasse(NomClasseParente):
def __init__(self):
NomClasseParente.__init__(self, ...)
Externe
=======
Ligne de commande:
sys.argv (de type list)
sys.argv[0] (premier argument après le nom de commande/script, "" si aucun argument)
(ou -c si -c command est utilisé)
(ou chemin complet du module si -m module est utilisé)
Variable d'environnement:
import os
string = os.environ['NOM_VARIABLE']
string = os.environ.get('NOM_VARIABLE2')
Entrée/sortie:
print([string chaine], ...) # affiche une chaîne à la sortie standard avec un changement de ligne
print("a",1) # affiche "a 1" (avec des espaces et un changement de ligne)
print("a",1,2,3) # affiche "a 1 2 3"
print("a", end=' ') # affiche "a" avec un espace (sans changement de ligne)
print(list liste) # affiche [element1, element2, element3] de la liste
string input([string prompt]) # demande une chaîne de caractère sur une ligne (entrée standard). affiche prompt si spécifié
Fichiers:
# détecter si un chemin complet est un fichier (/etc/passwd)
os.path.isfile(string filename)
# ouvrir un fichier
file = open(string filename)
# lire un fichier
string = file.read()
Python:
Exécuter des commandes
exec(string commands)
Chaines:
int len(string chaine) # nombre de caractères
Encodage:
bytes string.encode(string charset)
bytes string.encode('utf-8')
bytes string.encode('iso-8859-1')
Liste:
int len(list liste) # nombre d'éléments d'une liste
list.append(mixed item) # ajoute un item à la fin d'une liste
list.insert(integer pos, mixed item) # ajoute un item à la position "pos"
list sorted(list list) # retourne la liste triée
Range:
range range(integer n) # retourne un "range" de 1 à n
range range(integer min, integer max) # retourne un "range" de min à max-1
range range(integer min, integer max, integer step) # retourne un "range" de min à max-1 (avec un bon de -3)
list list(range r) # convertit un range en liste
Dictionnaire:
dict.keys() # retourne une liste des clés du dictionnaire
Math
====
abs(-1) # donne 1
abs(complex(3,4)) # donne 5.0 (magnitude, math.sqrt(3^2+4^2))
round(113.111,2) # donne 113.11
round(-113.111,2) # donne 113.11
Blogs...
- La grange
- Indentation du code
- Informal Introduction to Python
- Anciennement: http://home.gnu-gml.net/blog/index.py GNet://geekocrates/gml
Hyperliens...
Comment list
- aline > orthographe : tabulations (indentez avec des tabulations), cohérent, soi-même... (2006-06-25 15:25:51)
- aline > le lien GNet..ne fonctionne pas, erreur 404, à changer...
faut faire un peu le ménage de temps en temps, mmh?
:)
et en plus on est obligé de mettre une adresse...ah la la (2006-06-25 15:22:55) - The_worm > un langage à découvrir ...
l'identation ne se fait pas forcément par tabulation ;-)
http://fr.diveintopython.org/odbchelper_indenting.html (2005-04-29 21:15:02)
