Premier code :
# -*- coding:gb2312 -*-
def get_wendu():
wendu = 22
print("您输入的温度是%d"%wendu)
return wendu
def get_wendu_huashi():
wendu = wendu + 3
print("您输入的新温度是%d"%wendu)
print("------1-------")
wendu = get_wendu()
print("------2-------")
get_wendu_huashi()
Le premier résultat d'exécution de code :
Deuxième code :
# -*- coding:gb2312 -*-
def get_wendu():
wendu = 22
print("您输入的温度是%d"%wendu)
return wendu
def get_wendu_huashi():
result = wendu + 3 #这里是对第一段代码的修正,把前面一个wendu改成了新的变量名称result
print("您输入的新温度是%d"%result)
print("------1-------")
wendu = get_wendu()
print("------2-------")
get_wendu_huashi()
Le deuxième résultat de l'exécution du code :
J'ai deux questions :
La première question :
Pourquoi l'instruction wendu = get_wendu() est-elle exécutée et le résultat est : la température que vous avez entrée est de 22, ce n'est pas simplement une instruction d'affectation Quoi ? Semblable à wendu = 22, une telle affectation ne sera pas imprimée. Pourquoi wendu = get_wendu() affiche-t-il le résultat ? Se pourrait-il que l'instruction print de la fonction imprime cette chose pendant le processus d'affectation ?
Deuxième question :
Pourquoi wendu = wendu + 3 est-il faux dans le premier morceau de code, mais peut-il être exécuté avec succès s'il est remplacé par result = wendu + 3 ? Est-ce parce que lorsque la phrase wendu = wendu + 3 est exécutée, le système rencontre print("La nouvelle température que vous avez entrée est %d"%wendu), et le système ne peut pas distinguer si le wendu est le wendu précédent ou le wendu suivant ?
Votre première question est en fait que vous ne comprenez pas l'exécution de l'instruction. Wendu = get_wendu(), get_wendu() est une expression, elle renverra une valeur, et cette valeur sera assignée à la variable wendu, et get_wendu () Cette expression est une fonction d'exécution. Elle exécutera les instructions définies dans le corps de votre fonction dans l'ordre. Si vous y écrivez print, elle exécutera naturellement print.
Votre deuxième problème est en fait que vous ne comprenez pas la différence entre les variables locales et les variables globales. L'impression n'a aucun impact, elle est simplement causée par des références de variables différentes.
Tout d’abord, parlons des déclarations que vous pouvez exécuter ici.
Ici, la variable wendu n'est pas déclarée et définie à l'intérieur de la fonction, mais elle peut être utilisée directement. En fait, elle fait référence à la variable globale wendu, qui est la variable définie ici. Cela explique également pourquoi le résultat imprimé est 22+3
Et vous ne pouvez pas exécuter la déclarationwendu = get_wendu()
get_wendu()
是一个函数调用,调用get_wendu
,get_wendu
里面print("您输入的温度是%d"%wendu)
就是打印wendu
La valeur de cette variable localewendu = wendu + 3
是因为wendu
这个变量还未定义,你就在使用它,由错误信息就可以看出来,UnboundLocalError: local variable 'wendu' referenced before assignment
print("您输入的温度是%d"%wendu)
Cette phrase ne concerne-t-elle pas uniquement l'impressionPython recherchera par défaut les variables dans la portée actuelle. Puisqu'il n'y a pas de
wendu
这个变量自然也就报错了。你可以在wendu = wendu + 3
前加上一句nonlocal wendu
dans la portée actuelle, il peut fonctionner normalementprint() imprime sur la sortie standard,
Le message d'erreur est
Local variable 'wendu' referenced before assignment
, ce qui signifie que la variable wendu n'a pas été utilisée avant l'appel. Je pense que vous serez choqué si vous traduisez ce message d'erreur. Le nom est déclaré dans wendu = get_wendu() mais il dit non, mais l'ordinateur n'est pas aussi peu puissant que vous le pensez = =, = est utilisé pour l'affectation, il il faut savoir quel est le wendu.La raison est que pour l'affectation de variables à l'intérieur d'une fonction, Python considérera cette variable comme une variable locale, donc votre wendu est une variable locale à ce moment et non globale
Vous pouvez essayer de la modifier comme ça
N'utilisez pas Pinyin pour les noms de variables, n'utilisez pas Pinyin pour les noms de variables, n'utilisez pas Pinyin pour les noms de variables. Utilisez le moins possible les variables globales. Selon vos besoins, il sera préférable de choisir de passer des paramètres.