Table des matières
8. Fonction
8.1 Paramètres réels et paramètres formels
8.2 Passage de paramètres
8.2.1 Paramètres positionnels
8.2.2 Arguments de mot-clé et paramètres de mot-clé
Vous pouvez transmettre n'importe quel nombre de paramètres de mots clés :
8.2.5 Paramètres de mots-clés nommés
>>> personne('Jack', 24, job='Ingénieur')
Lors de la définition des paramètres de mots clés nommés, n'oubliez pas d'écrire le délimiteur * s'il n'y a pas de paramètres variables, sinon la définition sera positionnelle paramètres.
Les résultats de sortie sont les mêmes, mais les méthodes d'appel sont différentes.
Si vous souhaitez définir une fonction vide qui ne fait rien, vous pouvez utiliser l'instruction pass :
8.3.2 Rendre le paramètre réel facultatif
8.3.3 Retourner un dictionnaire
8.3.4 Fonction de retour
> ;> f = lazy_sum(1, 3, 5, 7, 9)
8.3.7 Fonction anonyme lambda
8.4 Passer une liste
8.4.1 Modifier la liste dans la fonction
8.4.2 Il est interdit de modifier la fonction
8.5 Passer n'importe quel nombre de paramètres réels (paramètres variables)
8.5.1 Combiner des arguments positionnels et des arguments variables
8.5.2 Utilisation d'arguments variables et d'arguments mots-clés
8.5.3 Utilisation de combinaisons de paramètres
8.5.4 Paramètres récursifs
8.6.1 Fonctions d'ordre supérieur
8.7 Stocker les fonctions dans des modules
La première étape pour utiliser un module est d'importer le module Lorsque nous exécutons le fichier hello module sur la ligne de commande, l'interpréteur Python. modifie une variable spéciale __name__ est définie sur __main__, et si le module hello est importé ailleurs, le jugement if échouera. Par conséquent, ce test if permet à un module d'exécuter du code supplémentaire lors de l'exécution via la ligne de commande. exécuter un test.
8.7.3 Importer des modules spécifiques
8.7.4 Utiliser as pour spécifier un alias pour une fonction
8.7.5 Utiliser as pour spécifier des alias pour les modules
8.7.6 Utilisez * pour importer toutes les fonctions du module
8.8 Guide d'écriture de fonctions
Maison développement back-end Tutoriel Python Introduction aux bases de Python - Fonction

Introduction aux bases de Python - Fonction

Jul 21, 2017 pm 04:45 PM
python 基础 总结

8. Fonction

  1. Une fonction est un bloc de code nommé qui est utilisé pour effectuer un travail spécifique. définition de la fonction def, indiquant le nom de la fonction. Lors de la définition d'une fonction, nous déterminons les noms et les positions des paramètres , et la définition de l'interface de la fonction est terminée. Pour l'appelant de la fonction, il suffit de savoir comment passer les paramètres corrects et quelle valeur la fonction renverra La logique complexe à l'intérieur de la fonction est encapsulée. je ne sais pas.

  2. Pour effectuer une tâche spécifique définie par une fonction, appelez la fonction. Lorsque vous effectuez plusieurs fois la même tâche dans un programme, il n'est pas nécessaire d'écrire du code à plusieurs reprises pour terminer la tâche. Il vous suffit d'appeler la fonction qui exécute la tâche et de laisser Python exécuter le code.

  3. La fonction d'ordre supérieur est appelée fonction d'ordre supérieur en anglais

8.1 Paramètres réels et paramètres formels

Paramètres formels : informations d'achèvement de fonction nécessaires à son travail.

Paramètres réels : informations transmises à la fonction lors de l'appel de la fonction.

8.2 Passage de paramètres

La définition de fonction peut contenir plusieurs paramètres formels, de sorte que l'appel de fonction peut également contenir plusieurs paramètres réels. Il existe de nombreuses façons de transmettre des paramètres réels à la fonction. Vous pouvez utiliser des paramètres de position, ce qui nécessite que l'ordre des paramètres réels soit le même que l'ordre des paramètres formels vous pouvez également utiliser un argument mot-clé ; des mots, dans lesquels chaque paramètre réel est représenté par Composé de noms et de valeurs de variables ; des listes et des dictionnaires peuvent également être utilisés.

8.2.1 Paramètres positionnels

1. Lorsque vous appelez une fonction, Python doit associer chaque paramètre réel dans l'appel de fonction à un paramètre formel dans la définition de la fonction. L'association simple est basée sur l'ordre des paramètres réels. Cette association est appelée argument de position.

2. Dans une fonction, vous pouvez utiliser n'importe quel nombre d'arguments de position selon vos besoins, et Python associera les paramètres réels dans l'appel de fonction aux paramètres formels correspondants dans la définition de la fonction dans l'ordre.

3. Lors de l'utilisation d'arguments positionnels pour appeler une fonction, si l'ordre des arguments est incorrect, le résultat ne sera pas correct.

8.2.2 Arguments de mot-clé et paramètres de mot-clé

Les arguments de mot-clé sont des paires (nom-valeur) transmises à la fonction. Vous associez le nom et la valeur directement dans l'argument, il n'y a donc aucune confusion lors de la transmission de l'argument à la fonction. Les arguments de mots clés éliminent le besoin de se soucier de l’ordre des arguments dans un appel de fonction et indiquent clairement le but de chaque valeur dans l’appel de fonction.

describe_pet(animal_type='hamster', pet_name='harry')

describe_pet(

animal_type='hamster', pet_name='harry')

>>> person('Bob', 35, city='Beijing')

name: Bob age: 35 other: {'city': 'Beijing'}

>>> person('Adam', 45, gender='M', job='Engineer')

name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

Vous pouvez transmettre n'importe quel nombre de paramètres de mots clés :

>>> personne('Bob', 35 ans, ville='Pékin')

nom : Bob âge : 35 autres : {'ville': 'Beijing'}>>> personne('Adam', 45, genre='M', job='Ingénieur')

def add_end(L=None):

    if L is None:

        L = []

    L.append('END')

    return L

nom : Adam âge : 45 autres : {'genre' : 'M', 'job' : 'Ingénieur'}

8.2.3 Valeur par défaut

Lors de l'écriture d'une fonction, vous pouvez spécifier une valeur par défaut pour chaque paramètre formel. Lorsqu'un paramètre réel est fourni pour un paramètre formel dans la fonction appelante, Python utilisera la valeur réelle du paramètre spécifiée, sinon la valeur par défaut du paramètre formel sera utilisée. Par conséquent, après avoir attribué des valeurs par défaut aux paramètres formels, les paramètres réels correspondants peuvent être omis dans l'appel de fonction. L'utilisation des valeurs par défaut simplifie les appels de fonction et indique clairement les utilisations typiques de la fonction. Le plus grand avantage est que cela peut réduire la difficulté d’appeler des fonctions.

def calc(*numbers):

    sum = 0

    for n in numbers:

        sum = sum + n * n

    return sum

Les paramètres par défaut doivent pointer vers des objets immuables !

>>> calc(1, 2)

5

>>> calc()

0

tbody>
def add_end(L=Aucun) :

>>> nums = [1, 2, 3]

>>> calc(*nums)

14

si L vaut Aucun : L = [] L.append('END') return L
8.2.4 Paramètres variables Par rapport à la définition d'un paramètre de liste ou de tuple, la définition d'un paramètre variable ne nécessite qu'un signe * devant le paramètre. À l'intérieur de la fonction, les numéros de paramètres reçoivent un tuple, le code de la fonction reste donc complètement inchangé. Cependant, lors de l'appel de cette fonction, n'importe quel nombre de paramètres peut être transmis, y compris 0 paramètre.
def calc(*numbers): somme = 0 pour n en nombres : somme = somme + n * n retourner la somme
>>> >5>>> calc()0
 Python Permet d'ajouter un signe * devant la liste ou le tuple, et de passer les éléments de la liste ou du tuple en paramètres variables :
>>> nums = [1, 2, 3]>>> calc(*nums)14

*nums signifie transmettre tous les éléments de la liste nums en tant que paramètres variables.

8.2.5 Paramètres de mots-clés nommés

Pour les paramètres de mots-clés, l'appelant de la fonction peut transmettre n'importe quel paramètre de mot-clé illimité. Quant à ce qui est transmis, vous devez passer le contrôle kw à l'intérieur de la fonction.

Si vous souhaitez limiter les noms des paramètres de mots-clés, vous pouvez utiliser des paramètres de mots-clés nommés. Par exemple, seuls la ville et le travail sont acceptés comme paramètres de mots-clés. La fonction ainsi définie est la suivante :

def person(name, age, *, city, job):

    print(name, age, city, job)

def person(name, age, *, ville, emploi) :

print(nom, âge, ville, emploi)

et paramètre de mot-clé ** kw Différemment, les paramètres de mot-clé nommé nécessitent un délimiteur spécial *, et les paramètres qui suivent * sont traités comme des paramètres de mot-clé nommé.

def person(name, age, *args, city, job):

    print(name, age, args, city, job)

S'il existe déjà un paramètre variable dans la définition de la fonction, le paramètre mot-clé nommé suivant n'a plus besoin d'un séparateur spécial* :

>>> person('Jack', 24, 'Beijing', 'Engineer')

Traceback (most recent call last):

  File "", line 1, in

TypeError: person() takes 2 positional arguments but 4 were given

def personne (nom, âge, *arguments, ville, travail) :

imprimer (nom, âge, arguments, ville, travail)

Les paramètres de mots clés nommés doivent transmettre le nom du paramètre, qui est différent des paramètres de position. Si aucun nom de paramètre n'est transmis, l'appel signalera une erreur :

def person(name, age, *, city='Beijing', job):

    print(name, age, city, job)

> >> person('Jack', 24, 'Beijing', 'Engineer')

>>> person('Jack', 24, job='Engineer')

Jack 24 Beijing Engineer

Retraçage (dernier appel le plus récent) :

Fichier "", ligne 1 , dans < module>

TypeError : person() prend 2 arguments de position mais 4 ont été donnés

Parce que le paramètre name city est manquant lors de l'appel et du job, l'interpréteur Python traite ces 4 paramètres comme des paramètres de position, mais la fonction person() n'accepte que 2 paramètres de position.

Les paramètres de mots clés nommés peuvent avoir des valeurs par défaut (valeurs par défaut), simplifiant ainsi les appels :

tr>
def person(name, age, *, city='Beijing', job):

print(name, age, city, job)

def nop():

    pass

Puisque le paramètre de mot-clé nommé city a une valeur par défaut, vous n'avez pas besoin de passer le paramètre city lors de l'appel :

>>> personne('Jack', 24, job='Ingénieur')

Jack 24 Ingénieur Pékin

Lors de la définition des paramètres de mots clés nommés, n'oubliez pas d'écrire le délimiteur * s'il n'y a pas de paramètres variables, sinon la définition sera positionnelle paramètres.

8.2.5 Appels de fonctions équivalents

Les résultats de sortie sont les mêmes, mais les méthodes d'appel sont différentes.

Remarque : la méthode d'appel que vous utilisez n'a pas d'importance, tant que l'appel de fonction produit le résultat souhaité. Utilisez simplement la méthode d’appel la plus simple à comprendre.

8.2.6 Fonction vide (pass)

Si vous souhaitez définir une fonction vide qui ne fait rien, vous pouvez utiliser l'instruction pass :

L'instruction pass ne fait rien. Pass peut être utilisé comme espace réservé. Par exemple, si vous n'avez pas encore compris comment écrire le code de la fonction, vous pouvez d'abord mettre un pass pour que le code puisse s'exécuter. .

def nop():

>>> x, y = move(100, 100, 60, math.pi / 6)

>>> print(x, y)

151.96152422706632 70.0

pass

>>> r = move(100, 100, 60, math.pi / 6)

>>> print(r)

(151.96152422706632, 70.0)

8.2.7 Éviter les erreurs de paramètres réels Aucun paramètre réel n'est donné, l'ordre réel des paramètres est erroné et le format réel des paramètres (guillemets, etc.) n'est pas pris en compte. 8.2.8 instruction globale (variable globale) Si vous souhaitez modifier la valeur stockée dans une variable globale dans une fonction, vous devez utiliser l'instruction globale pour la variable. 8.3 Valeur de retour Une fonction n'affiche pas toujours directement la sortie, elle peut traiter certaines données et renvoyer une valeur ou un ensemble de valeurs. La valeur renvoyée par une fonction est appelée valeur de retour. La valeur de retour de la fonction est renvoyée à l'aide de l'instruction return. Au sein d'une fonction, vous pouvez utiliser l'instruction return pour renvoyer une valeur à la ligne de code qui a appelé la fonction. Les valeurs de retour vous permettent de simplifier votre programme principal en déplaçant la plupart des tâches lourdes de votre programme vers des fonctions. 8.3.1 Renvoyer plusieurs valeurs L'instruction import math signifie importer le package mathématique et permet au code suivant de référencer sin, cos et d'autres fonctions dans le package mathématique. Vous pouvez renvoyer plusieurs valeurs. table> Mais en fait ce n'est qu'une illusion, la fonction Python renvoie toujours une seule valeur :
>>> x, y = déplacer (100, 100, 60 , math.pi / 6)>>> print(x, y)151.96152422706632 70.0
>>> r = move(100, 100, 60, math.pi / 6)>>> print(r) ( 151.96152422706632, 70.0)

La valeur de retour est un tuple ! Cependant, en termes de syntaxe, les parenthèses peuvent être omises lors du retour d'un tuple, et plusieurs variables peuvent recevoir un tuple en même temps et attribuer les valeurs correspondantes en fonction de la position. Par conséquent, la fonction Python renvoie plusieurs valeurs. ​renvoie en fait un tuple, mais il est plus pratique d'écrire .

8.3.2 Rendre le paramètre réel facultatif

Utilisez l'instruction if pour déterminer si ce paramètre réel est nécessaire.

8.3.3 Retourner un dictionnaire

La fonction peut renvoyer tout type de valeur, y compris des structures de données plus complexes telles que des listes et des dictionnaires.

8.3.4 Fonction de retour

En plus d'accepter des fonctions comme paramètres, les fonctions d'ordre supérieur peuvent également renvoyer des fonctions comme valeurs de résultat. Si vous n'avez pas besoin de faire la somme immédiatement, vous ne pouvez pas renvoyer le résultat de la sommation, mais renvoyer la fonction de sommation :

def lazy_sum(*args):

    def sum():

        ax = 0

        for n in args:

            ax = ax + n

        return ax

    return sum

def lazy_sum(*args):

def sum():

>>> f = lazy_sum(1, 3, 5, 7, 9)

>>> f

.sum at 0x101c6ed90>

ax = 0

>>> f()

25

pour n dans les arguments :

ax = ax + n

return ax

>>> f1 = lazy_sum(1, 3, 5, 7, 9)

>>> f2 = lazy_sum(1, 3, 5, 7, 9)

>>> f1==f2

False

return sum

Lorsque nous appelons lazy_sum() , ce qui est renvoyé n'est pas le résultat de la sommation, mais la fonction de sommation :

> ;> f = lazy_sum(1, 3, 5, 7, 9)

def get_formatted_name(first_name, last_name):  

            """返回整洁的姓名"""   

  full_name = first_name + ' ' + last_name   

  return full_name.title()

while True:   

  print("nPlease tell me your name:")   

  print("(enter 'q' at any time to quit)")   

  f_name = input("First name: ")   

  if f_name == 'q':       

    break   

  l_name = input("Last name: ")   

  if l_name == 'q':       

    break   

formatted_name = get_formatted_name(f_name, l_name)   

print("nHello, " + formatted_name + "!")

>>> f

.sum à 0x101c6ed90> ;

Lorsque la fonction f est appelée, le résultat de la somme est effectivement calculé :

def count():

    def f(j):

        def g():

            return j*j

        return g

    fs = []

    for i in range(1, 4):

        fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()

return fs

>>> f1, f2, f3 = count()

>>> f1()

1

>>> f2()

4

>>> f3()

9

>>> f()25
 Remarque : Lorsque nous appelons lazy_sum(), chaque appel retournera une nouvelle fonction, même si les mêmes paramètres sont passés dans :
>>> ;>> f2 = lazy_sum(1, 3, 5, 7, 9)>>> >
  Les résultats des appels de f1() et f2() ne s'affectent pas. 8.3.5 Utiliser des fonctions avec while
def get_formatted_name(first_name, last_name): """Renvoyer le joli nom""" full_name = first_name + ' " + last_name return full_name.title() while True : print("nVeuillez me dire votre nom :") print("(entrez 'q' à tout moment pour quitter)") f_name = input("Prénom : ") if f_name == 'q' : break l_name = input("Nom : " ) si l_name == 'q' : break formatted_name = get_formatted_name(f_name, l_name) print("nBonjour, " + formatted_name + "!")
8.3.6 Fermeture Une chose à garder à l'esprit lors du renvoi d'une fermeture est la suivante : la fonction de retour ne fait référence à aucune variable de boucle ou à aucune variable qui le fera. changer par la suite. Si vous devez faire référence à une variable de boucle, la méthode consiste à créer une autre fonction et à utiliser les paramètres de la fonction pour lier la valeur actuelle de la variable de boucle. Quelle que soit la façon dont la variable de boucle change par la suite, la valeur liée au paramètre de fonction sera. ne change pas. L'inconvénient est que le code est plus long, vous pouvez utiliser les fonctions lambda pour raccourcir le code.
def count(): def f(j) : def g() : return j*j return g fs = [] pour i dans la plage ( 1, 4): fs.append(f(i)) # f(i) est exécuté immédiatement, donc la valeur actuelle de i est transmise dans f()return fs>>> f1, f2, f3 = compte()>>> > ;> f2()4>>> f3()9

8.3.7 Fonction anonyme lambda

Lorsque nous transmettons une fonction, parfois nous n'avons pas besoin de définir explicitement la fonction. Il est plus pratique de transmettre directement la fonction anonyme.

En Python, la prise en charge des fonctions anonymes est limitée. Toujours en prenant comme exemple la fonction map(), lors du calcul de f(x)=x2, en plus de définir une fonction de f(x), vous pouvez aussi passer directement une fonction anonyme :

table>

Par comparaison, on voit que la fonction anonyme lambda x: x * x est en réalité :

>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

[1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> list(map(lambda x: x * x, [1, 2, 3, 4 , 5, 6, 7, 8, 9]))

[1, 4, 9, 16, 25, 36, 49, 64, 81]

def f(x):

    return x * x

def f(x):

>>> f = lambda x: x * x

>>> f

at 0x101c6ef28>

>>> f(5)

25

return x * x
Le mot clé lambda représente une fonction anonyme, le x avant les deux points représente le paramètre de la fonction. Les fonctions anonymes ont une limitation, c'est-à-dire qu'elles ne peuvent avoir qu'une seule expression. Il n'est pas nécessaire d'écrire return. La valeur de retour est le résultat de l'expression. Il y a un avantage à utiliser des fonctions anonymes, car la fonction n'a pas de nom, vous n'avez donc pas à vous soucier des conflits de noms de fonction. De plus, la fonction anonyme est également un objet fonction. Vous pouvez également affecter la fonction anonyme à une variable puis utiliser la variable pour appeler la fonction : >>> f = lambda x: x * x>>> fonction à 0x101c6ef28>>>> f(5)25

8.4 Passer une liste

pour le nom dans les noms : Vous trouverez souvent utile de passer une liste à une fonction. Cette liste peut contenir des noms, des nombres ou des objets plus complexes. . (comme un dictionnaire). Une fois qu'une liste est transmise à une fonction, celle-ci peut accéder directement à son contenu. Utilisez les fonctions ci-dessous pour améliorer l’efficacité du traitement des listes.

8.4.1 Modifier la liste dans la fonction

 1. Après avoir transmis la liste à la fonction, la fonction peut la modifier. Toute modification apportée à cette liste au sein de la fonction est permanente, vous permettant de traiter efficacement de grandes quantités de données.

 2. Ajouter ou supprimer un ajout pop

 3. Une fonction termine une tâche et les fonctions peuvent s'appeler. Optimiser les fonctions pour faciliter la maintenance et la modification.

8.4.2 Il est interdit de modifier la fonction

Pour résoudre ce problème, vous pouvez transmettre ainsi une copie de la liste à la fonction à la place de l'original, les éventuelles modifications apportées ; par la fonction n'affectera que la copie et pas du tout l'original.

 function_name(list_name[:]), [:] équivaut à une copie.

8.5 Passer n'importe quel nombre de paramètres réels (paramètres variables)

Parfois, vous ne savez pas à l'avance combien de paramètres réels une fonction doit accepter. Heureusement, Python permet à la fonction de collecter. n'importe quel nombre de paramètres réels de l'instruction appelante. Le nombre d'arguments.

def make_pizza(*toppings):

L'astérisque dans le nom du paramètre *toppings indique à Python de créer un tuple vide nommé toppings et d'encapsuler toutes les valeurs reçues​​dans ce tuple. L'instruction print à l'intérieur du corps de la fonction génère une sortie pour démontrer que Python peut gérer l'appel de la fonction avec une valeur, ainsi que l'appel de la fonction avec trois valeurs. Il gère les différents appels de la même manière. Notez que Python encapsule les arguments dans un tuple, même si la fonction ne reçoit qu'une seule valeur.

8.5.1 Combiner des arguments positionnels et des arguments variables

Si vous souhaitez qu'une fonction accepte différents types d'arguments, vous devez inclure n'importe quel nombre de paramètres formels dans la définition de la fonction. Python fait d'abord correspondre les arguments de position et les arguments de mots-clés, puis collecte les arguments restants dans le dernier paramètre formel.

8.5.2 Utilisation d'arguments variables et d'arguments mots-clés

Def build_profile(first, last, **user_info) :

Exigences de définition de la fonction build_profile() Fournit un premier et nom de famille, tout en permettant à l'utilisateur de fournir autant de paires nom-valeur qu'il le souhaite. Les deux astérisques dans le paramètre **user_info indiquent à Python de créer un dictionnaire vide nommé user_info et d'encapsuler toutes les paires nom-valeur reçues dans ce dictionnaire. Dans cette fonction, les paires nom-valeur dans user_info sont accessibles comme n'importe quel autre dictionnaire.

pour la clé, valeur dans user_info.items():   

  profile[key] = value

user_profile = build_profile('albert', 'einstein',location=' princeton', field='physics')

8.5.3 Utilisation de combinaisons de paramètres

 1. Définissez des fonctions en Python, vous pouvez utiliser les paramètres requis, les paramètres par défaut, les paramètres variables, les paramètres de mots-clés et les paramètres nommés. Paramètres de mots-clés, ces cinq paramètres peuvent être utilisés en combinaison. Mais veuillez noter que l'ordre de définition des paramètres doit être : Paramètres requis, paramètres par défaut, paramètres variables, paramètres de mots-clés nommés et paramètres de mots-clés.

2. Les fonctions Python ont une forme de paramètre très flexible, qui peut non seulement implémenter des appels simples, mais également transmettre des paramètres très complexes.

3. Les paramètres par défaut doivent utiliser des objets immuables. S'il s'agit d'objets variables, il y aura des erreurs logiques lors de l'exécution du programme !

4. Faites attention à la syntaxe de définition des paramètres de variable et des paramètres de mot-clé :

5. *args est un paramètre variable, et args reçoit un tuple

6 . **kw est un paramètre de mot-clé et kw reçoit un dict.

 7. Et la syntaxe de la façon de transmettre des paramètres de variable et des paramètres de mot-clé lors de l'appel d'une fonction :

 Les paramètres de variable peuvent être transmis directement : func(1, 2, 3), ou Vous pouvez d'abord assembler la liste ou le tuple, puis le transmettre via *args: func(*(1, 2, 3));

Les paramètres du mot clé peuvent être transmis directement : func(a=1) , b=2 ), vous pouvez d'abord assembler le dict, puis le transmettre via **kw: func(**{'a': 1, 'b': 2}).

Utiliser *args et **kw est l'idiome de Python. Bien sûr, d'autres noms de paramètres peuvent également être utilisés, mais il est préférable d'utiliser l'idiome.

8.5.4 Paramètres récursifs

Au sein d'une fonction, vous pouvez appeler d'autres fonctions. Si une fonction s'appelle à l'intérieur de , la fonction est récursive. Les avantages des fonctions récursives sont une définition simple et une logique claire. Théoriquement, toutes les fonctions récursives peuvent être écrites dans une boucle, mais la logique des boucles n'est pas aussi claire que la récursivité.

def fact(n):

    if n==1:

        return 1

    return n * fact(n - 1)

def fact(n): si n==1 : return 1 return n * fact(n - 1)

Lors de l'utilisation de fonctions récursives, il faut veiller à éviter le débordement de pile. Dans les ordinateurs, les appels de fonction sont implémentés via la structure de données de la pile Chaque fois qu'un appel de fonction est saisi, un cadre de pile est ajouté à la pile. Chaque fois qu'une fonction revient, un cadre de pile est soustrait de la pile. Puisque la taille de la pile n’est pas infinie, trop d’appels récursifs entraîneront un débordement de pile.

Le mouvement de la Tour de Hanoï peut être implémenté très simplement à l'aide de fonctions récursives.

8.6 Fonctions d'ordre supérieur

8.6.1 Fonctions d'ordre supérieur

Puisque les variables peuvent pointer vers des fonctions et que les paramètres des fonctions peuvent recevoir des variables, alors une fonction peut recevoir une autre fonction En tant que paramètres, ce type de fonction est appelé fonction d'ordre supérieur.

def add(x, y, f):

    return f(x) + f(y)

def add(x, y, f):

return f(x) + f(y)

8.6.2 Fonctions intégrées

1 .La fonction abs() qui trouve la valeur absolue n'a qu'un seul paramètre.

>>> type(123)

>>> type('str')

>>> type(None)

 2. Pour déterminer le type d'objet, utilisez la fonction type() :

>>> type(123)

>>> len('ABC')

3

>>> 'ABC'.__len__()

3

>>> 🎜>< ;class 'str'>

>>> type(Aucun)

 3. Pour calculer la racine carrée, vous pouvez appeler la fonction math.sqrt().

 4.lower() renvoie une chaîne minuscule.

La méthode 5.__len__ renvoie la longueur. En Python, si vous appelez la fonction len() pour essayer d'obtenir la longueur d'un objet, en fait, à l'intérieur de la fonction len(), elle appelle automatiquement la méthode __len__() de l'objet, donc le code suivant est équivalent:

>>> hasattr(obj, 'x') # 有属性'x'吗?

True

>>> obj.x

9

>>> hasattr(obj, 'y') # 有属性'y'吗?

False

>>> setattr(obj, 'y', 19) # 设置一个属性'y'

>>> hasattr(obj, 'y') # 有属性'y'吗?

True

>>> getattr(obj, 'y') # 获取属性'y'

19

>>> obj.y # 获取属性'y'

19

>>> len('ABC')

3

>>> def f(x):

...     return x * x

...

>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> list(r)

[1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> 'ABC'.__len__()

3

>>> from functools import reduce

>>> def fn(x, y):

...     return x * 10 + y

...

>>> reduce(fn, [1, 3, 5, 7, 9])

13579

6. La fonction max max() peut recevoir n'importe quel nombre de paramètres et renvoyer le plus grand. 7. Si vous souhaitez obtenir toutes les propriétés et méthodes d'un objet, vous pouvez utiliser la fonction dir(), qui renvoie une liste contenant des chaînes par exemple, pour obtenir toutes les propriétés et méthodes d'un. Objet str :  8. La fonction hex() intégrée de Python convertit un entier en une chaîne représentée en hexadécimal. 9. Pour les relations d'héritage de classe, il est très gênant d'utiliser type(). Pour déterminer le type de classe, nous pouvons utiliser la fonction isinstance(). Les types de paramètres sont vérifiés et seuls les paramètres de type entier et à virgule flottante sont autorisés. La vérification du type de données peut être implémentée à l'aide de la fonction intégrée isinstance(). Utilisez la fonction isinstance intégrée pour déterminer si une variable est une chaîne. 10. Avec getattr(), setattr() et hasattr(), on peut manipuler directement l'état d'un objet.
>>> hasattr(obj, 'x') # Possède des attributs « x » ? Vrai>>> obj.x9>>> Y a-t-il un attribut « y » ? Faux>>> setattr(obj, 'y', 19) # Définir un attribut 'y'>>> obj, 'y') # Y a-t-il un attribut 'y' ? Vrai>>> getattr(obj, 'y') # Obtenir l'attribut 'y'19>> > obj.y # Obtenir l'attribut 'y'19
Grâce à une série de fonctions intégrées, nous peut analyser n'importe quel objet Python et obtenir ses données internes. Il convient de noter que nous n’obtiendrons des informations sur l’objet que lorsque nous ne connaîtrons pas les informations sur l’objet. 11. Python a des fonctions map() et reduction() intégrées. map applique tour à tour la fonction passée à chaque élément de la séquence et renvoie le résultat en tant que nouvel itérateur.
>>> >...     retourner x * x...>>> 8, 9])>>> liste(r)[1, 4, 9, 16, 25, 36, 49, 64, 81]
Comment utiliser réduire. réduire applique une fonction à une séquence [x1, x2, x3, ...]. Cette fonction doit recevoir deux paramètres. réduire continue le résultat et effectue un calcul cumulatif avec l'élément suivant de la séquence.
>>> de functools import réduire> ;>> def fn(x, y):... Retour x * 10 + y...>>> (fn, [1, 3, 5, 7, 9])13579

 12.La fonction filter() intégrée de Python est utilisée pour filtrer les séquences. filter() accepte également une fonction et une séquence . Contrairement à map(), filter() applique tour à tour la fonction transmise à chaque élément, puis décide de conserver ou de supprimer l'élément selon que la valeur de retour est True ou False. La clé est d’implémenter correctement une fonction « filtre ». Notez que la fonction filter() renvoie un Iterator, qui est une séquence paresseuse, donc pour forcer filter() à terminer les résultats du calcul, vous devez utiliser la fonction list() pour obtenir tous les résultats et renvoyer la liste.

def is_odd(n):

    return n % 2 == 1

 

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

# 结果: [1, 5, 9, 15]

def is_odd(n):

return n % 2 = = 1

>>> sorted([36, 5, -12, 9, -21])

[-21, -12, 5, 9, 36]

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)

['Zoo', 'Credit', 'bob', 'about']

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

# Résultat : [1 , 5, 9, 15]

13. La fonction sorted() intégrée de Python peut trier la liste.

>>> , -21])

[-21, -12, 5, 9, 36]

 14.sorted( ) est également une fonction d'ordre supérieur. Elle peut également recevoir une fonction clé pour mettre en œuvre un tri personnalisé, tel que le tri par valeur absolue. Pour effectuer un tri inversé, vous n'avez pas besoin de modifier la fonction de la clé. Vous pouvez passer le troisième paramètre reverse=True.

>>> def now():

...     print('2015-3-25')

...

>>> f = now

>>> f()

2015-3-25

>>> now.__name__

'now'

>>> f.__name__

'now'

>>> trié(['bob', 'about', 'Zoo', 'Crédit'], key=str.lower, reverse=True)

class Student(object):

 

    @property

    def score(self):

        return self._score

 

    @score.setter

    def score(self, value):

        if not isinstance(value, int):

            raise ValueError('score must be an integer!')

        if value < 0 or value > 100:

            raise ValueError('score must between 0 ~ 100!')

        self._score = value

['Zoo', 'Crédit', 'bob', 'about']
 15. La fonction enumerate intégrée de Python peut transformer une liste en une paire index-élément, de sorte que l'index et l'élément lui-même puissent être itérés en même temps dans un pour la boucle. 16. La fonction round() peut renvoyer n'importe quelle décimale. 8.6.3 Décorateur La manière d'ajouter dynamiquement des fonctions pendant l'exécution du code est appelée "Décorateur". Essentiellement, un décorateur est une fonction d’ordre supérieur qui renvoie une fonction. Décorateur : ajoutez de nouvelles fonctionnalités sans modifier la fonction elle-même. L'objet fonction a un attribut __name__, vous pouvez obtenir le nom de la fonction : Le décorateur @property intégré de Python est chargé de transformer une méthode en appel de propriété :
>>> def now():... print('2015-3-25')... >>> f = maintenant>>> f()25-3-2015>>> __name__ 'maintenant'>>> f.__name__'maintenant'
classe Étudiant(objet): @property def score(self): return self._score @score.setter def score(self, value): sinon isinstance(value, int): raise ValueError('le score doit être un entier !') si la valeur < 0 ou la valeur > 100 : raise ValueError('le score doit être compris entre 0 et 100 !') self._score = valeur

@property est largement utilisé dans les définitions de classes, permettant aux appelants d'écrire des codes courts tout en assurant les vérifications nécessaires sur les paramètres, réduisant ainsi le risque d'erreurs lors de l'exécution du programme.

Le décorateur @unique peut nous aider à vérifier qu'il n'y a pas de valeurs en double.

8.7 Stocker les fonctions dans des modules

Afin d'écrire du code maintenable, vous pouvez regrouper de nombreuses fonctions dans différents fichiers, de sorte que le code contenu dans chaque fichier soit relativement moindre. En Python, un fichier .py est appelé un module (Module).

L'un des avantages des fonctions est qu'elles permettent de séparer des blocs de code du programme principal. En donnant des noms descriptifs aux fonctions, vous rendez le programme principal beaucoup plus facile à comprendre. Vous pouvez aller plus loin et stocker les fonctions dans des fichiers séparés appelés modules, puis importer les modules dans le programme principal. L'instruction import permet au code du module d'être utilisé dans le fichier programme en cours d'exécution.

En stockant les fonctions dans des fichiers séparés, vous pouvez masquer les détails du code du programme et vous concentrer sur la logique de haut niveau du programme. Cela vous permet également de réutiliser des fonctions dans de nombreux programmes différents. En stockant les fonctions dans des fichiers séparés, vous pouvez partager ces fichiers avec d'autres programmeurs plutôt qu'avec l'ensemble du programme. Savoir importer des fonctions vous permet également d'utiliser des bibliothèques de fonctions écrites par d'autres programmeurs.

Afin d'éviter les conflits de noms de modules, Python a introduit une méthode d'organisation des modules par répertoire, appelée package. Une fois le package introduit, tant que le nom du package de niveau supérieur n'est pas en conflit avec les autres, tous les modules n'entreront pas en conflit avec les autres. Désormais, le nom du module abc.py devient mycompany.abc, de même, le nom du module xyz.py devient mycompany.xyz.

Notez qu'il y aura un fichier __init__.py sous chaque répertoire de package. Ce fichier doit exister, sinon, Python traitera ce répertoire comme un répertoire normal au lieu d'un package. __init__.py peut être un fichier vide ou contenir du code Python, car __init__.py lui-même est un module et son nom de module est mycompany.

8.7.1 Importer l'intégralité du module

Pour rendre la fonction importable, vous devez d'abord créer le module. Les modules sont des fichiers avec une extension .py qui contiennent du code à importer dans un programme.

if __name__=='__main__' :

if __name__=='__main__':

    test()

test()

La première étape pour utiliser un module est d'importer le module Lorsque nous exécutons le fichier hello module sur la ligne de commande, l'interpréteur Python. modifie une variable spéciale __name__ est définie sur __main__, et si le module hello est importé ailleurs, le jugement if échouera. Par conséquent, ce test if permet à un module d'exécuter du code supplémentaire lors de l'exécution via la ligne de commande. exécuter un test.

8.7.2 Portée

Dans un module, nous pouvons définir de nombreuses fonctions et variables, mais certaines fonctions et variables que nous espérons être utilisées par d'autres, et certaines fonctions et variables que nous espérons uniquement utilisées à l'intérieur du module. En Python, cela est réalisé grâce au préfixe _. Les noms normaux de fonctions et de variables sont publics et peuvent être directement référencés, tels que : abc, x123, PI, etc. ; les variables comme __xxx__ sont des variables spéciales et peuvent être directement référencées, mais ont des objectifs spéciaux, comme ci-dessus. Les __author__ et __name__ sont des variables spéciales. Les commentaires du document définis par le module hello sont également accessibles avec la variable spéciale __doc__. Généralement, nous ne devons pas utiliser ce nom de variable pour nos propres variables ou les variables comme _xxx et __xxx sont non publiques (privées). ne doivent pas être citées directement, comme _abc, __abc, etc. ;

def _private_1(name):

    return 'Hello, %s' % name

 

def _private_2(name):

    return 'Hi, %s' % name

 

def greeting(name):

    if len(name) > 3:

        return _private_1(name)

    else:

        return _private_2(name)

Les fonctions ou variables privées ne doivent pas être citées par d'autres, alors à quoi servent-elles ? Veuillez consulter l'exemple :
def _private_1(name): return 'Bonjour, %s' % nom def _private_2(name): return 'Bonjour, %s' % nom def salutation(nom) : si len(nom) > 3 : return _private_1(nom) else : return _private_2(name)

Nous exposons la fonction Greeting() dans le module et masquons la logique interne avec les fonctions privées. De cette façon, lors de l'appel de la fonction Greeting(), nous n'avons pas à nous soucier des détails de la fonction privée interne. Il s'agit également d'une méthode d'encapsulation et d'abstraction de code très utile, c'est-à-dire que toutes les fonctions qui n'ont pas besoin d'être référencées de l'extérieur sont définies comme privées, et seules les fonctions qui doivent être référencées de l'extérieur sont définies comme publiques.

8.7.3 Importer des modules spécifiques

Stockez plusieurs fonctions dans un module, séparées par des virgules, vous pouvez importer n'importe quel nombre de fonctions depuis le module.

8.7.4 Utiliser as pour spécifier un alias pour une fonction

from pizza import make_pizza as mp

Si le nom de la fonction à importer peut entrer en conflit avec un existant nom dans le programme. Ou si le nom de la fonction est trop long, vous pouvez spécifier un alias court et unique - un autre nom pour la fonction, similaire à un surnom. Pour attribuer ce pseudo spécial à une fonction, vous devez le faire lors de son importation.

8.7.5 Utiliser as pour spécifier des alias pour les modules

Vous pouvez également spécifier des alias pour les modules. En attribuant un alias court à un module (comme en attribuant l'alias p au module pizza), vous pouvez plus facilement appeler des fonctions dans le module. Comparé à pizza.make_pizza(), p.make_pizza() est plus concis.

8.7.6 Utilisez * pour importer toutes les fonctions du module

L'utilisation de l'opérateur astérisque (*) permet à Python d'importer toutes les fonctions du module.

Cependant, lorsque vous utilisez un gros module que vous n'avez pas écrit vous-même, il est préférable de ne pas utiliser cette méthode d'importation : s'il y a des fonctions dans le module avec les mêmes noms que celles utilisées dans votre projet, cela peut conduire à des résultats inattendus : Python peut rencontrer plusieurs fonctions ou variables portant le même nom et écraser la fonction au lieu d'importer toutes les fonctions séparément.

8.8 Guide d'écriture de fonctions

Lors de l'écriture de fonctions, vous devez garder plusieurs détails à l'esprit.

1. Les fonctions doivent recevoir des noms descriptifs, en utilisant uniquement des lettres minuscules et des traits de soulignement. Les noms descriptifs vous aident, vous et les autres, à comprendre ce que le code essaie de faire. La convention ci-dessus doit également être suivie lors de la dénomination des modules.

2. Chaque fonction doit contenir un commentaire qui explique brièvement sa fonction. Le commentaire doit suivre la définition de la fonction et utiliser le format docstring . Une fonction bien documentée permet à d'autres programmeurs de l'utiliser simplement en lisant la description dans la docstring : ils peuvent être sûrs que le code fonctionnera comme décrit tant qu'ils connaissent le nom de la fonction, les arguments requis et le type de celle-ci ; la valeur de retour, ils peuvent Vous pouvez l'utiliser dans vos propres programmes.

 3.Lors de la spécification d'une valeur par défaut pour un paramètre formel, il ne doit y avoir aucun espace de chaque côté du signe égal.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

MySQL doit-il payer MySQL doit-il payer Apr 08, 2025 pm 05:36 PM

MySQL a une version communautaire gratuite et une version d'entreprise payante. La version communautaire peut être utilisée et modifiée gratuitement, mais le support est limité et convient aux applications avec des exigences de stabilité faibles et des capacités techniques solides. L'Enterprise Edition fournit une prise en charge commerciale complète pour les applications qui nécessitent une base de données stable, fiable et haute performance et disposées à payer pour le soutien. Les facteurs pris en compte lors du choix d'une version comprennent la criticité des applications, la budgétisation et les compétences techniques. Il n'y a pas d'option parfaite, seulement l'option la plus appropriée, et vous devez choisir soigneusement en fonction de la situation spécifique.

HaDIDB: une base de données légère et évolutive horizontalement dans Python HaDIDB: une base de données légère et évolutive horizontalement dans Python Apr 08, 2025 pm 06:12 PM

HaDIDB: Une base de données Python évolutive de haut niveau légère HaDIDB (HaDIDB) est une base de données légère écrite en Python, avec un niveau élevé d'évolutivité. Installez HaDIDB à l'aide de l'installation PIP: PiPinStallHaDIDB User Management Créer un utilisateur: CreateUser () pour créer un nouvel utilisateur. La méthode Authentication () authentifie l'identité de l'utilisateur. FromHadidb.OperationMportUserUser_OBJ = User ("Admin", "Admin") User_OBJ.

Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Apr 08, 2025 pm 09:39 PM

Il est impossible de visualiser le mot de passe MongoDB directement via NAVICAT car il est stocké sous forme de valeurs de hachage. Comment récupérer les mots de passe perdus: 1. Réinitialiser les mots de passe; 2. Vérifiez les fichiers de configuration (peut contenir des valeurs de hachage); 3. Vérifiez les codes (May Code Hardcode).

MySQL a-t-il besoin d'Internet MySQL a-t-il besoin d'Internet Apr 08, 2025 pm 02:18 PM

MySQL peut s'exécuter sans connexions réseau pour le stockage et la gestion des données de base. Cependant, la connexion réseau est requise pour l'interaction avec d'autres systèmes, l'accès à distance ou l'utilisation de fonctionnalités avancées telles que la réplication et le clustering. De plus, les mesures de sécurité (telles que les pare-feu), l'optimisation des performances (choisissez la bonne connexion réseau) et la sauvegarde des données sont essentielles pour se connecter à Internet.

MySQL Workbench peut-il se connecter à MariaDB MySQL Workbench peut-il se connecter à MariaDB Apr 08, 2025 pm 02:33 PM

MySQL Workbench peut se connecter à MARIADB, à condition que la configuration soit correcte. Sélectionnez d'abord "MariADB" comme type de connecteur. Dans la configuration de la connexion, définissez correctement l'hôte, le port, l'utilisateur, le mot de passe et la base de données. Lorsque vous testez la connexion, vérifiez que le service MARIADB est démarré, si le nom d'utilisateur et le mot de passe sont corrects, si le numéro de port est correct, si le pare-feu autorise les connexions et si la base de données existe. Dans une utilisation avancée, utilisez la technologie de mise en commun des connexions pour optimiser les performances. Les erreurs courantes incluent des autorisations insuffisantes, des problèmes de connexion réseau, etc. Lors des erreurs de débogage, analysez soigneusement les informations d'erreur et utilisez des outils de débogage. L'optimisation de la configuration du réseau peut améliorer les performances

Comment optimiser les performances MySQL pour les applications de haute charge? Comment optimiser les performances MySQL pour les applications de haute charge? Apr 08, 2025 pm 06:03 PM

Guide d'optimisation des performances de la base de données MySQL dans les applications à forte intensité de ressources, la base de données MySQL joue un rôle crucial et est responsable de la gestion des transactions massives. Cependant, à mesure que l'échelle de l'application se développe, les goulots d'étranglement des performances de la base de données deviennent souvent une contrainte. Cet article explorera une série de stratégies efficaces d'optimisation des performances MySQL pour garantir que votre application reste efficace et réactive dans des charges élevées. Nous combinerons des cas réels pour expliquer les technologies clés approfondies telles que l'indexation, l'optimisation des requêtes, la conception de la base de données et la mise en cache. 1. La conception de l'architecture de la base de données et l'architecture optimisée de la base de données sont la pierre angulaire de l'optimisation des performances MySQL. Voici quelques principes de base: sélectionner le bon type de données et sélectionner le plus petit type de données qui répond aux besoins peut non seulement économiser un espace de stockage, mais également améliorer la vitesse de traitement des données.

Comment résoudre MySQL ne peut pas se connecter à l'hôte local Comment résoudre MySQL ne peut pas se connecter à l'hôte local Apr 08, 2025 pm 02:24 PM

La connexion MySQL peut être due aux raisons suivantes: le service MySQL n'est pas démarré, le pare-feu intercepte la connexion, le numéro de port est incorrect, le nom d'utilisateur ou le mot de passe est incorrect, l'adresse d'écoute dans my.cnf est mal configurée, etc. 2. Ajustez les paramètres du pare-feu pour permettre à MySQL d'écouter le port 3306; 3. Confirmez que le numéro de port est cohérent avec le numéro de port réel; 4. Vérifiez si le nom d'utilisateur et le mot de passe sont corrects; 5. Assurez-vous que les paramètres d'adresse de liaison dans My.cnf sont corrects.

Comment utiliser Aws Glue Crawler avec Amazon Athena Comment utiliser Aws Glue Crawler avec Amazon Athena Apr 09, 2025 pm 03:09 PM

En tant que professionnel des données, vous devez traiter de grandes quantités de données provenant de diverses sources. Cela peut poser des défis à la gestion et à l'analyse des données. Heureusement, deux services AWS peuvent aider: AWS Glue et Amazon Athena.

See all articles