Maison > Article > développement back-end > Portée de la fonction en Python
Cet article présente principalement la portée de la fonction en Python, qui a une certaine valeur de référence. Maintenant, je la partage avec vous. Les amis dans le besoin peuvent s'y référer
En python, une fonction est un domaine d'effet. Cet article se concentre sur l'introduction de la portée des fonctions en python. Les amis intéressés devraient y jeter un œil ensemble
En python, une fonction est une portée
name = 'xiaoyafei' def change_name(): name = '肖亚飞' print('在change_name里的name:',name) change_name() # 调用函数 print("在外面的name:",name)
Les résultats d'exécution sont les suivants :
Nom dans change_name : Xiao Yafei
Nom extérieur : xiaoyafei
Essayons à nouveau dans une fonction imbriquée Que cherchez-vous ?
age = 15 def func(): print('第一层age:',age) # 第一层age: 15 def func2(): age = 73 print("func2中的age:",age) # func2中的age: 73 def func3(): age = 84 print("func3中的age:",age) # func3中的age: 84 func3() # 调用func3函数 func2() # 调用func2函数 func()
Dans les fonctions imbriquées ci-dessus, on peut bien expliquer qu'une fonction est une portée, alors modifions un peu le code maintenant pour voir la situation ?
age = 15 def func(): print('第一层age:',age) # 第一层age: 15 def func2(): print("func2中的age:",age) # func2中的age: 15 # 看到没有,如果当前作用域里没有age变量,那么它就会往上找 def func3(): age = 84 print("func3中的age:",age) # func3中的age: 84 func3() # 调用func3函数 func2() # 调用func2函数 func()
Alors, à ce stade À ce moment-là, quelqu'un a dit que beaucoup d'absurdités s'étaient avérées être des variables locales et des variables globales. Je veux donc demander : dans la fonction imbriquée ci-dessus, il n'y a pas de variable d'âge dans func2, alors comment la trouve-t-on ? ?
À ce stade, nous devons examiner l'ordre de recherche de portée :
Portée variable LEGB
L:locals L'espace de noms au sein de la fonction, y compris les variables locales et les paramètres réels
E:enclosing L'espace de noms de la fonction imbriquée externe, C'est-à-dire la couche supérieure adjacente, pour exemple : s'il n'y a pas de variable d'âge dans func2, il ira à func pour trouver ceci
G : variable globale globale
B : Espace de noms des modules intégrés intégrés
Ahem, comprenons d'abord ce qu'est un espace de noms ?
L'espace de noms, également connu sous le nom d'espace de noms, comme son nom l'indique, il est l'endroit où les noms sont stockés. Quels noms doivent être stockés ? Par exemple, x = 1, 1 est stocké en mémoire, alors où est stocké le nom de la variable x ? et 1 est stocké
>>> x = 1 >>> id(1) 1576430608
L'espace de noms est divisé en trois types suivants :
locals : est l'espace de noms au sein de la fonction, y compris les variables locales et les paramètres formels
globals : variables globales, l'espace de noms du module où la fonction est définie
builtins : l'espace de noms du module intégré
variables différentes La différence de portée est déterminée par l'espace de noms dans lequel se trouve la variable
La portée est la plage
level = 'L0' n = 22 def func(): level = 'L1' n = 33 print(locals()) # {'n': 33, 'level': 'L1'} 在之前说过在python中,一个函数就是一个作用域,这就很完美的体现了 def outer(): n = 44 level = 'L2' print(locals(),n) # {'level': 'L2', 'n': 44} 44 def inner(): level = 'L3' print(locals(),n) # {'level': 'L3', 'n': 44} 44 inner() outer() func()Prenez la recherche de règle de L --> E -- > G -->B, c'est-à-dire que s'il n'est pas trouvé localement, il effectuera une recherche locale (comme les fermetures) en dehors de la zone locale. il est introuvable, il effectuera une recherche globale, puis ira à la fonction intégrée pour essayer de trouver. Recommandations associées :
Introduction aux fonctions en python
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!