Maison  >  Questions et réponses  >  le corps du texte

Question de novice Python sur les variables locales et les variables globales

Premier code :

# -*- coding:gb2312 -*-
nums = [11,22,33,44,55]

def nums_chang():
    nums = [11,22,33,44,55,999]
    print(nums)

nums_chang() # 打印出来是[11,22,33,44,55,999]
print(nums)  # 打印出来是[11,22,33,44,55]

Résultat de l'exécution :

Deuxième code :

# -*- coding:gb2312 -*-
nums = [11,22,33,44,55]

def nums_chang():
    nums.append(999)  # 打印出来是[11,22,33,44,55,999]
    print(nums)       # 打印出来是[11,22,33,44,55,999]

nums_chang()
print(nums)

Résultat de l'exécution :

Ma question est :
Pourquoi les deux résultats imprimés par le premier code sont-ils différents, mais les résultats imprimés par le deuxième code sont les mêmes ? Surtout le deuxième morceau de code, pourquoi la commande append dans la fonction peut-elle modifier les variables globales à l'extérieur. Dans le premier morceau de code, la liste est redéfinie, mais les variables globales externes ne peuvent pas être modifiées ? Quelle est la raison ici ?

学习ing学习ing2686 Il y a quelques jours1066

répondre à tous(3)je répondrai

  • 仅有的幸福

    仅有的幸福2017-06-12 09:26:56

    Après avoir lu la réponse acceptée, je pense que j'ai encore raté le point.
    Tout d'abord, la variable nums est définie comme une variable globale, ce qui signifie que dans ce fichier ".py", toutes les classes et fonctions peuvent l'utiliser. Mais toutes les variables sont aussi un objet, et les objets sont divisés en mutables et immuables. La liste est un objet mutable, ce qui signifie qu'elle peut être modifiée. Alors, que sont les objets mutables ? Ce sont ceux qui peuvent opérer sur des objets sans affecter leur création et leur mort en mémoire. Entrez x="234", et si vous attribuez une autre valeur, x="111". En fait, les deux x sont déjà deux objets, ils sont juste couverts, c'est-à-dire x = x + "123", et x est aussi un nouvel objet.

    S'il s'agit d'une liste, x = [1,2,3], opérez maintenant dessus, x.remove(1), alors l'objet x est toujours un objet x, mais la valeur de l'objet a changé

    Le premier morceau de code : il s'agit d'une réaffectation. Dans différentes portées, nums est à nouveau attribué, de sorte que la variable globale nums et la variable nums dans la fonction nums_chang ne sont plus le même objet, elles apparaissent donc lorsque vous. print. différentes valeurs. À l'heure actuelle, la variable nums dans la fonction nums_chang est déjà une variable locale et n'est utilisée que par cette fonction

    .

    Le deuxième morceau de code : nums est une liste et un objet variable, donc l'opération sur la liste n'affecte pas cet objet, donc cet objet est toujours l'objet global. Les variables globales sont utilisées à la fois dans les fonctions et à l'extérieur, donc après vous. modifiez-le, la valeur de la variable globale est également modifiée

    répondre
    0
  • 天蓬老师

    天蓬老师2017-06-12 09:26:56

    Premièrement : concernant la question de la portée, vous pouvez d'abord vous référer à l'un de mes articles : Python : Scope et LEGB, vous pouvez d'abord comparer 变量的查找有个基本的认识,然后我们能够看到, 因为有赋值语句, 所以numsIl recherchera uniquement à partir de la portée locale et n'interagira pas avec la portée globale

    .

    Deuxième : sur la base du premier, nous pouvons voir que nums.append(999)中的nums是从全局作用域找到的, 又因为用的是append方法, 这方法是直接用于源列表本身, 所以你看到全局的numsa également été mis à jour

    répondre
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:26:56

    Si la fonction ne parvient pas à trouver la variable dans sa propre portée, elle reviendra à la portée précédente pour la trouver. C'est ainsi que votre deuxième est née.
    Si c’est le premier, c’est évident que vous avez donné de la valeur

    répondre
    0
  • Annulerrépondre