Introduction à trois manières d'espace de noms en python (avec exemples)

不言
Libérer: 2018-10-09 16:48:46
avant
3109 Les gens l'ont consulté

Cet article vous présente les trois méthodes d'espaces de noms en python (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Il existe trois types d'espaces de noms en Python :

L'espace de noms intégré est l'espace dans lequel divers noms sont automatiquement chargés dans la mémoire lors du démarrage de l'interpréteur, tels que print, input, etc. . Noms pouvant être utilisés s'ils doivent être définis

L'espace de noms global est l'espace où se trouvent tous les noms de variables et de fonctions que nous définissons de haut en bas. Il est chargé dans la mémoire lors de l'exécution. du programme de haut en bas.

L'espace de noms local, tel que l'espace ouvert lorsqu'une fonction est exécutée, stocke divers noms définis dans la fonction. Cet espace de noms local disparaît à la fin de l'exécution de la fonction.

Vous pouvez utiliser des noms dans les espaces de noms globaux et intégrés dans l'espace de noms local

Vous pouvez utiliser les noms dans l'espace de noms intégré dans l'espace de noms global, mais vous ne pouvez pas utiliser les noms dans l'espace de noms local.

Les noms globaux et locaux ne peuvent pas être utilisés dans les espaces de noms intégrés.

peut être clairement compris car l'espace de noms intégré a le niveau le plus élevé et peut être utilisé sans définition, suivi de l'espace de noms global, et le niveau le plus bas est l'espace de noms local.

Lorsqu'un espace de noms de bas niveau utilise un nom, il recherchera d'abord dans son propre espace de noms. S'il existe, il sera utilisé. Sinon, il recherchera dans l'espace de noms de niveau supérieur. , il sera utilisé. Sinon, il continuera au niveau suivant. Recherchez dans l'espace de niveau supérieur jusqu'à l'espace de noms intégré de niveau supérieur. S'il existe, utilisez-le. Sinon, une erreur sera signalée.

Un exemple est le suivant :

num = 1 #这是全局命名空间内定义的num = 1
def func1(): #这个函数会创建一个局部命名空间1
    num = 2  #这是在局部命名空间1定义的num = 2
    def func2(): #这个函数会创建一个局部命名空间2
        num = 3 #这是在局部命名空间2 内 定义的num = 3
        print(num) #这是在局部命名空间2内 使用num 变量
    func2() # 调用函数func2时 会执行该命令创建局部命名空间2
func1()  #调用函数func1时会创建局部命名空间1,
#这几个命名空间的级别顺序是:内置>全局>局部1>局部2
#当print(num)指令执行时它会在局部2内查找是否有num,发现有则直接引用,如果没有则会到上一级(局部1)中查找,局部1没有则继续到上一级(全局)查找
Copier après la connexion

Regardez un autre exemple :

#max()函数是内置的函数,如果我们在全局命名空间中定义了函数名为max的函数时,则该函数就失效了,也就是说在自身空间内找到了max()后就不去内置命名空间查找了
def max(a,b,c):
    return 'max失效了?'
print(max(1,2,3))#
正常情况下应该输出3(max函数功能是返回最大值),但是因为我们把max这个名字占用了,所以当使用时程序就不去上一级空间(内置命名空间)去查找了
Copier après la connexion

Deux fonctions globals() et locals() liées aux espaces de noms
Vous pouvez utiliser globals() pour afficher tous les noms définis dans l'espace de noms global
Vous pouvez utiliser locals() pour afficher tous les noms définis dans l'espace de noms actuel. S'il est global, il renverra le global, et s'il est local. , il renverra le local
La valeur de retour d'une fonction peut être considérée comme un dictionnaire, et le format est {key1:value1,key2:value2,...}

Lorsque la fonction 1 est imbriquée dans la fonction 2, pour la fonction 1 Les variables de types de données immuables peuvent être référencées dans la fonction 2, mais ne peuvent pas être modifiées

def func1():
    a = 1
    def func2():
        a = a + 1 
#此处会报一个严重错误,因为a同时出现在等号两边,Python会先执行等号右边的表达式,
#发现你在引用a,然后它会先在本空间查找a,结果找到了等号左边的a,其结果就是“在定义变量前引用变量”
        pass      
    func2()
func1()
Copier après la connexion
#如果想要修改,可以使用nonlocal(python3中新增)
def func1():
    a = 1
    def func2():
        nonlocal a
        a = a + 1
    func2()
    print(a) 
func1()
#我们可以看出,执行func2()后再输出a,a已经变成2了
    2
Copier après la connexion

nonlocal ne peut agir que sur les variables locales Lorsqu'il est utilisé, il trouvera automatiquement. si l'espace de noms local de niveau supérieur est S'il existe cette variable, continuez à rechercher vers le haut jusqu'à "l'espace de noms local" de niveau supérieur

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!

Étiquettes associées:
source:segmentfault.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!