FAQ PythonConsultez toutes les FAQ

Nombre d'auteurs : 16, nombre de questions : 313, dernière mise à jour : 10 juillet 2017  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions posées sur le forum Python complétées par d'autres questions qui pouvaient nous sembler intéressantes de traiter. Toutefois il se peut que les réponses apportées contiennent des erreurs, imprécisions ... Vous pouvez dans ce cas contacter un des membres de la rédaction pour lui faire part de vos remarques.

L'équipe Python de Developpez.


SommaireBuiltinsLes fonctions (37)
précédent sommaire suivant
 

Comme tout langage à typage dynamique, il n'est pas possible d'effectuer une surchage de fonctions. On peut toutefois contourner le problème de plusieurs façons dépendant du paramétrage des fonctions que vous souhaitez écrire.
Par exemple, pour une fonction proposant un paramètre nécessitant un traitement spécial suivant son type, on peut simplement tout d'abord tester le type du paramètre avant d'appeler une autre fonction privée adéquate.

Code python : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def _testint(data): print "traitement d'un entier ", data 
def _teststr(data): print "traitement d'un string ", data 
def _testlist(data): print "traitement d'une liste ", data 
  
def fonctiontest(data): 
    if type(data) == int: _testint(data) 
    elif type(data) == str: _teststr(data) 
    elif type(data) == list: _testlist(data) 
    else: raise AttributeError, "aucun traitement pour le type "+str(type(data)) 
  
  
>>> fonctiontest(1) 
traitement d'un entier 1 
>>> fonctiontest("1") 
traitement d'un string 1 
>>> fonctiontest({}) 
AttributeError: aucun traitement pour le type <type 'dict'>
S'il s'agit d'une surcharge de fonctions dont le nombre de paramètres peut varier, on peut utiliser la syntaxe *args qui permet de passer autant de paramètres supplémentaires par position que l'on veut

Code python : Sélectionner tout
1
2
3
4
5
6
7
def somme(*args): 
    return sum(args) 
  
>>> print somme(5,3,2) 
10 
>>> print somme(1,2,3,4) 
10
S'il s'agit d'une surcharge de fonctions dont le nombre de paramètres peut varier ainsi que leur type (ou leur sens), on peut dans ce cas utiliser soit un paramètre dictionnaire soit un paramètre de la forme **keys qui permet de passer des paramètres par la syntaxe nomparametre = valeurparametre

Code python : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
def calcul(**keys): 
    score = keys['value'] 
    if 'somme' in keys: score += keys['somme'] 
    if 'produit' in keys: score *= keys['produit'] 
    return score 
  
  
>>> print calcul(value = 5, somme = 2, produit = 7) 
49 
>>> print calcul(value = 4, produit = 9) 
36
On peut bien évidemment mélanger les différentes syntaxe. La syntaxe générale étant def mafonction(param1, param2, ..., *args, **keys): ...

Mis à jour le 11 septembre 2006 Guigui_

Si vous avez besoin d'utiliser une fonction et que vous ne connaissez pas les paramètres qu'elle prend, vous pouvez tout de même récupérer le prototype complet de la fonction. Pour cela, il vous faudra passer par le module inspect. Ce module propose la fonction inspect.getargspec( func) qui renvoie le nom et les valeurs par défaut des arguments de la fonction func. Un tuple de quatre valeurs est retourné de la forme (args, varargs, varkw, defaults). args est la liste des noms des paramètres spécifiés. varargs et varkx correspondent aux noms des arguments * et ** ou bien à None si ceux-ci ne sont pas présents. Enfin defaults est un tuple des valeurs par défaut des arguments ou bien None s'il n'y a aucune valeur par défaut spécifiée. Si ce tuple a n éléments, ils correspondent aux n derniers éléments listés dans args

Code python : Sélectionner tout
1
2
3
4
5
6
7
8
9
import inspect 
  
def TestInspectFonction(p1, p2, **kwarg): pass 
  
class TestInspect: 
    def MaFonction(self, p1, p2 = 'PPP2', p3 = 'PPP3', *arg , **kwarg ): pass 
  
inspect.getargspec(TestInspectFonction)   ## (['p1', 'p2'], None, kwarg, None) 
inspect.getargspec(TestInspect.MaFonction)  ## (['self', 'p1', 'p2', 'p3'], 'arg', 'kwarg', ('PPP2', 'PPP3'))

Mis à jour le 5 mars 2007 Guigui_

Retourne la valeur absolue d’un nombre. L’argument nb peut être un entier, un nombre flottant ou un nombre complexe. Dans le cas d’un nombre complexe, la fonction renvoie le module du nombre.

Mis à jour le 10 juillet 2017 deusyss

Retourne vrai si tous les éléments de l’iterable sont « vrai » ou s'il est vide.

Voici l’algorithme de all:

Code : Sélectionner tout
1
2
3
4
5
>>> def all(iterable) 
       for element in iterable 
          if not element: 
             return False 
       return True

Mis à jour le 10 juillet 2017 deusyss

Retourne vrai si un des éléments de la table est vrai. Retourne faux si l’itérable est vide.

Code : Sélectionner tout
1
2
3
4
5
>>> def all(iterable) 
       for element in iterable 
          if  element: 
             return True 
       return False

Mis à jour le 10 juillet 2017 deusyss

Retourne un string qui contient une représentation affichable d’un objet, mais échappe tous les caractères non ASCII. Cette fonction renvoie un string similaire à celui renvoyé par repr() en Python 2.

Mis à jour le 10 juillet 2017 deusyss

Convertit un entier en binaire. Si nb n’est pas un objet int Python, il doit définir une méthode __index__() qui retourne un entier.

Mis à jour le 10 juillet 2017 deusyss

Retourne vrai si l’objet passé en argument est « callable », faux sinon. Si cette fonction retourne vrai, il est quand même possible qu’un call échoue. En revanche si elle retourne faux, il est certain qu’un call n’aboutira jamais.

Mis à jour le 10 juillet 2017 deusyss

Retourne la lettre correspondante dont l’Unicode correspond à l’entier passé en paramètre. par exemple chr(98) retourna la lettre « b ¯. Cette fonction fait l’inverse de ord(),

Mis à jour le 10 juillet 2017 deusyss

Compile la source en code ou en un objet AST. Un objet « code » peut être exécuté par exec() ou eval(). La source peut être une chaine de caractères, un byte string ou un objet AST.

L’argument filename doit faire référence au fichier qui contient le code à compiler.

Le mode spécifie avec quelle fonction il est possible d’exécuter le code. Exec si la source contient beaucoup de code, eval si la source ne contient qu’une seule expression et single si la source ne contient qu’une seule expression interactive.

Mis à jour le 10 juillet 2017 deusyss

L’argument de cette fonction est un objet et le nom de l’un de ses attributs, la fonction va supprimer l’attribut spécifié si l’objet le lui permet.

Mis à jour le 10 juillet 2017 deusyss

Sans argument, la fonction retourne la liste des noms dans le contexte actuel. Avec un argument, elle essaie de retourner la liste valide des attributs de l’objet.

Si l’objet possède une méthode _dir_(), cette méthode sera appelée et devra retourner la liste des attributs. Ceci permet aux objets qui implémentent _getattr_() ou _getattribute_() de choisir la façon dont la fonction dir() agira sur leurs attributs

Mis à jour le 10 juillet 2017 deusyss

Prend les deux nombres non complexes passés en paramètre et retourne leur quotient et le reste.

Mis à jour le 10 juillet 2017 deusyss

Retourne un objet enumerate, le paramètre iterable doit être un itérateur ou un objet qui supporte l’itération. La méthode _next_() retournée par enumerate est composée de deux éléments, un index et la valeur de l’index.

Code : Sélectionner tout
1
2
3
>>> saison = ['Eté', 'Printemps','Automne','Hiver'] 
>>> list(enumerate(saison)) 
[(0,'Eté'),(1,'Printemps'),(2,'Automne'),(3,'Hiver')]

Mis à jour le 10 juillet 2017 deusyss

Les arguments sont un string et des globals ou locals en option. Si spécifié, globals doit être un dictionnaire. Si spécifié, locals est un objet de mapping.

L’expression passée en argument est convertie et évaluée comme une expression Python.

Mis à jour le 10 juillet 2017 deusyss

l’attribut object doit être soit une chaine de caractères soit un objet. Si c’est une chaine de caractères, elle sera convertie en expressions Python. si c’est un objet, le code qu’il contient sera simplement exécuté.

Mis à jour le 10 juillet 2017 deusyss

Construit un itérateur grâce à iterable pour lequel chaque itération de fonction retourne vrai.

Mis à jour le 10 juillet 2017 deusyss

Transforme value en une version formatée, contrôlée par format_spec.

Mis à jour le 10 juillet 2017 deusyss

Retourne la valeur de l’attribut de l’objet passé en paramètre. Si name correspond au nom d’un des attributs de l’objet cela revient au même que d’appeler l’objet. Exemple : getattr(x, “foobar”) est égal à x.foobar.

Mis à jour le 10 juillet 2017 deusyss

Retourne un dictionnaire représentant la table symbolique actuelle.

Mis à jour le 10 juillet 2017 deusyss

Les arguments sont un objet et une chaine de caractères. Si la chaine de caractères correspond à un des attributs de l’objet, la fonction retourne vrai, faux sinon. Cette méthode est implémentée en utilisant la fonction getattr(object, name) et d’observer si elle soulève une exception AttributeError ou non.

Mis à jour le 10 juillet 2017 deusyss

Retourne la valeur hashée de l’objet. Ces valeurs hashées sont des entiers. Elles sont utilisées pour comparer des clés de dictionnaire efficacement.

Mis à jour le 10 juillet 2017 deusyss

Invoque l’aide de base de Python. Si aucun argument n’est passé, la page de base de l’aide sera affichée. Si l’argument est une chaine de caractères, alors la méthode va chercher si elle correspond au nom d’un module, si oui elle affiche la page d’aide en question.

Mis à jour le 10 juillet 2017 deusyss

Convertit un nombre entier en une chaine hexadécimale préfixée par « 0x » par exemple:

Code : Sélectionner tout
1
2
3
4
>>> hex(255) 
'0xff' 
>>> hex(-42) 
'0x2a'
Si l’entier n’est pas un entier Python, il doit définir une méthode __index__() qui retourne un entier.

Mis à jour le 10 juillet 2017 deusyss

Retourne « l’identité » d’un objet. Cette identité est un entier qui est garanti d’être unique et constant pendant toute la vie de l'object.

Mis à jour le 10 juillet 2017 deusyss

Permet d’ajouter du texte supplémentaire à une chaine de caractères avant l’affichage.

Exemple:

Code : Sélectionner tout
1
2
3
4
>>> str = input('J'aime') 
J'aime le chocolat au lait! 
>>> s 
le chocolat au lait!

Mis à jour le 10 juillet 2017 deusyss

Retourne vrai si l’objet passé en paramètre est un objet appartenant à la classe spécifiée dans classinfo. Si classinfo est composé de plusieurs classes, object doit au moins appartenir à une des classes pour que la fonction retourne vrai, retourne faux sinon.

Mis à jour le 10 juillet 2017 deusyss

Retourne un objet iterator. Le premier argument est interprété très différemment selon si le deuxième argument est présent ou non. Sans deuxième argument, object doit être une collection d’objets qui supporte le protocole d’itération. Si le deuxième argument est présent, alors object doit être un objet appelable.

Mis à jour le 10 juillet 2017 deusyss

Retourne la taille (le nombre d’attributs) d’un objet. L’argument s peut être une séquence comme un string, des bytes ou une liste. Il peut aussi être une collection comme un dictionnaire ou un set.

Mis à jour le 10 juillet 2017 deusyss

Met à jour et retourne le dictionnaire qui représente la table de symboles courante

Mis à jour le 10 juillet 2017 deusyss

Retourne un itérateur qui applique function à tous les objets contenus dans iterable.

Mis à jour le 10 juillet 2017 deusyss

Retourne le plus grand objet d’un itérable composé de tous les objets de arg1 et de arg2

Mis à jour le 10 juillet 2017 deusyss

Retourne une « memory view » d’un objet créé à partir de obj passé en argument.

Mis à jour le 10 juillet 2017 deusyss

Retourne le plus petit objet d’un itérable composé de tous les objets de arg1 et de arg2

Mis à jour le 10 juillet 2017 deusyss

Donne le prochain item d'iterator en appelant sa fonction __next_().

Mis à jour le 10 juillet 2017 deusyss

Convertit un entier en octal. Si x n’est pas un entier Python il doit avoir défini une méthode __index__() qui retourne un entier.

Mis à jour le 10 juillet 2017 deusyss

Ouvre un fichier et retourne le file object correspondant. Si le fichier ne peut pas être ouvert, une erreur OSError est générée.

file doit être le chemin du fichier en absolu ou en relatif.

mode est un paramètre qui permet de déterminer le mode d’ouverture du fichier. Par défaut le mode
« r » est choisi. Ce qui signifie que le fichier est ouvert en lecture. Un autre mode commun est « w » pour passer en mode écriture.

  • “r” - Ouvert en lecture
  • “w” - Ouvert en écriture
  • “x” - Ouvert en création, échoue si le fichier existe déjà
  • “b” - Mode binaire
  • “t” - Mode texte (par défaut)
  • “+” - Ouvre un fichier disque en écriture et lecture

Mis à jour le 10 juillet 2017 deusyss

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Contacter le responsable de la rubrique Python