Maison  >  Article  >  développement back-end  >  Portée de la fonction en Python

Portée de la fonction en Python

不言
不言original
2018-05-07 13:56:361180parcourir

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

  • Portée globale : survie globale, validité globale

  • Portée locale : inventaire temporaire, partiellement efficace

Prenons un exemple

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!

Déclaration:
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