Utilisez Python cinq points pour obtenir la méthode scope

高洛峰
Libérer: 2017-03-16 16:25:20
original
1387 Les gens l'ont consulté

1. Portée au niveau du bloc

Pensez-y, y aura-t-il une sortie lors de l'exécution du programme suivant à ce moment-là ? L'exécution sera-t-elle réussie ?

#块级作用域
 
if 1 == 1:
    name = "lzl"
 
print(name)
 
 
for i in range(10):
    age = i
 
print(age)
Copier après la connexion

Jetons d'abord un coup d'œil aux résultats de l'exécution

C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py
lzl
9
Copier après la connexion

Processus terminé avec le code de sortie 0

Le code a été exécuté avec succès, pas de problème en Java ; /C# Dans , l'exécution du code ci-dessus indiquera que le nom et l'âge ne sont pas définis, mais dans Python, il peut être exécuté avec succès car il n'y a pas de portée au niveau du bloc. Python. La variable peut être appelée en externe, afin qu'elle puisse s'exécuter avec succès

2. Portée locale

En rappelant les connaissances apprises auparavant, nous apprenons le <.> fonction

Lorsque la fonction est une portée distincte. Il n'y a pas de portée au niveau du bloc en Python, mais il existe une portée locale ; regardez le code suivant #Portée locale

Exécutez cette section Code, demandez-vous s'il y aura une sortie ?
def  func():
    name = "lzl"
 
print(name)
Copier après la connexion

Erreur d'exécution, je pense que tout le monde peut comprendre cela, la variable name ne prend effet que dans la fonction func(), elle ne peut donc pas être appelée globalement, faites un simple ajustement au code ci-dessus, voyons voir ; quel est le résultat ?
Traceback (most recent call last):
  File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module>
    print(name)
NameError: name 'name' is not defined
Copier après la connexion
Copier après la connexion

Ajouter une ligne de code au code précédent. Avant que le nom de la variable ne soit imprimé, une fonction est exécutée. L'impression changera-t-elle à ce moment-là ?
#局部作用域
 
def  func():
    name = "lzl"
 
func()          #执行函数
print(name)
Copier après la connexion

L'exécution rapporte toujours une erreur, revenons à la phrase tout à l'heure : même si la fonction est exécutée, la portée de name est uniquement à l'intérieur de la fonction, et elle ne peut toujours pas être appelée de l'extérieur ; rappelez-vous les deux premiers points de connaissance Attendez, commençons ensuite le mouvement d'amplification
Traceback (most recent call last):
  File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module>
    print(name)
NameError: name 'name' is not defined
Copier après la connexion
Copier après la connexion

3. Chaîne de portée

Effectuer des ajustements à la fonction et voir comment le code suivant s'exécute ?

Après avoir appris les fonctions, vous devez savoir que Snor sera affiché après l'exécution de f1(). Rappelons d'abord un concept. Il existe une chaîne de portée en Python. Les variables seront recherchées de l'intérieur. l'extérieur. Allez d'abord chez vous. En cherchant la lunette, je ne suis pas allé voir les supérieurs pour la chercher jusqu'à ce que je ne la trouve pas et que j'ai signalé une erreur
#作用域链
 
name = "lzl"
def f1():
    name = "Eric"
    def f2():
        name = "Snor"
        print(name)
    f2()
f1()
Copier après la connexion

4. La version ultime de la lunette.

D'accord, assez de préparation, la version ultime est ici~~

Réfléchissez à la question de savoir si le résultat final de l'exécution de f2() doit imprimer "lzl" ou "eric" ? N'oubliez pas votre réponse. Au lieu de publier la réponse maintenant, jetez un œil au code suivant :
#终极版作用域
 
name = "lzl"
 
def f1():
    print(name)
 
def f2():
    name = "eric"
    f1()
 
f2()
Copier après la connexion

Le résultat de l'exécution est "lzl". Analysez le code ci-dessus et le résultat de l'exécution de f2() est La mémoire. adresse de la fonction f1, c'est-à-dire ret=f1 ; exécuter ret() équivaut à exécuter f1(), cela n'a rien à voir avec f2() et f1(). dans la même chaîne de portée s'il n'y a pas de variable à l'intérieur de la fonction, elle regardera à l'extérieur, donc la valeur du nom de la variable à ce moment est "lzl" si vous comprenez cela, alors vous connaissez également la réponse au code ultime ; que la réponse n'a pas été donnée tout à l'heure
#终极版作用域
 
name = "lzl"
 
def f1():
    print(name)
 
def f2():
    name = "eric"
    return f1
 
ret = f2()
ret()
 
#输出:lzl
Copier après la connexion

Oui, la sortie est "lzl", rappelez-vous qu'avant l'exécution de la fonction, la portée a été formée et la chaîne de portée a également été générée
#终极版作用域
 
name = "lzl"
 
def f1():
    print(name)
 
def f2():
    name = "eric"
    f1()
 
f2()
 
# 输出:lzl
Copier après la connexion

5. Questions d'entretien avec Sina

Jugement Quel type de li ? De quel type sont les éléments de li ?
li = [lambda :x for x in range(10)]
Copier après la connexion

Vous pouvez voir que li est un type de liste et que les éléments de la liste sont des fonctions. Imprimez ensuite la valeur de retour du premier élément de la liste. Quelle est la valeur de retour à ce moment ?
print(type(li))
print(type(li[0]))
 
# <class &#39;list&#39;>
# <class &#39;function&#39;>
Copier après la connexion

li La valeur de retour de la première
#lambada 面试题
 
li = [lambda :x for x in range(10)]
 
res = li[0]()
print(res)
 
#输出:9
Copier après la connexion
fonction

est 9 et non 0. N'oubliez pas : le code interne ne sera pas exécuté avant que la fonction ne soit exécutée ; le blog par vous-même Pratiquez et approfondissez votre impression

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:php.cn
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!