Python-Neuling, über Funktionsprobleme
高洛峰
高洛峰 2017-06-12 09:26:03
0
4
809

Erster 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()

Das erste Ergebnis der Codeausführung:

Zweiter 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()

Das zweite Ergebnis der Codeausführung:

Ich habe zwei Fragen:
Die erste Frage:
Warum wird die Anweisung wendu = get_wendu() ausgeführt und das Ergebnis ist: Die von Ihnen eingegebene Temperatur ist 22, das ist nicht nur eine Zuweisungsanweisung Was? Ähnlich wie bei wendu = 22 wird eine solche Zuweisung nicht ausgedruckt. Warum gibt wendu = get_wendu () das Ergebnis aus? Könnte es sein, dass die print-Anweisung in der Funktion dieses Ding während des Zuweisungsprozesses ausgibt?
Zweite Frage:
Warum ist wendu = wendu + 3 im ersten Teil des Codes falsch, aber kann er erfolgreich ausgeführt werden, wenn er durch result = wendu + 3 ersetzt wird? Liegt es daran, dass das System bei der Ausführung des Satzes wendu = wendu + 3 auf print("Die neue Temperatur, die Sie eingegeben haben, ist %d"%wendu stößt) und das System nicht unterscheiden kann, ob Wendu das vorherige Wendu oder das nachfolgende Wendu ist?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

Antworte allen (4)
洪涛

你的第一个问题其实是不懂语句的执行,wendu = get_wendu()这一句,get_wendu()这是一个表达式,它会返回一个值,这个值会被赋值给wendu这个变量,而get_wendu()这个表达式是执行函数,它会依次执行你函数体定义的语句,你在里面写了print,它自然会执行print。

你的第二个问题其实是不懂局部变量和全局变量的区别,print什么的一点影响都没有,只是因为变量引用不同导致的。
先说你这里能够运行的语句。

def get_wendu_huashi(): result = wendu + 3

这里面,wendu 这个变量没有在函数内部声明定义,但是可以直接用,实际上引用的是全局变量wendu,也就是wendu = get_wendu()这里定义的变量。这也解释了result为啥打印的结果是22+3

而你不能运行的语句

def get_wendu_huashi(): wendu = wendu + 3 print("您输入的新温度是%d"%wendu)

这里实际上在函数内部作用域声明了一个新变量 wendu,它尚未被定义,而后wendu+3里的这个wendu变量就是引用了这个未定义的新变量,这自然而然的就造成了错误。

搞明白全局作用域和局部作用域就知道错在什么地方了。

    仅有的幸福
    1. get_wendu()是一个函数调用,调用get_wenduget_wendu里面print("您输入的温度是%d"%wendu)就是打印wendu这个局部变量的值

    2. wendu = wendu + 3是因为wendu这个变量还未定义,你就在使用它,由错误信息就可以看出来,UnboundLocalError: local variable 'wendu' referenced before assignment

      阿神
      1. print("您输入的温度是%d"%wendu)这句话不就是打印吗

      2. python 默认会现在当前作用域寻找变量,由于在当前作用域没有wendu这个变量自然也就报错了。你可以在wendu = wendu + 3前加上一句nonlocal wendu,这样就可以正常运行了

        仅有的幸福
        1. print()函数是向标准输出打印,

          print("您输入的温度是%d"%wendu) # print会打印括号中的内容,%d表示格式化输出int类型, # 其实这句话和print(("您输入的温度是22")是等价的
        2. 报错信息是Local variable 'wendu' referenced before assignment,说的是wendu变量在调用前 没有使用。相信你如果翻译了这个Error信息一定会惊呆了呢,命名在wendu = get_wendu()声明了但是竟然说没有,但是计算机也没有你想的那么低能= =,=是用来赋值的,它一定知道wendu是哪个wendu。
          原因对于函数内部变量赋值,Python会认为这个变量是局部变量,所以你的wendu此时是一个局部变量并不是global
          你可以尝试这样修改

          def get_wendu_huashi(): global wendu wendu = wendu + 3 print("您输入的新温度是%d"%wendu)
        3. 变量名不要用拼音,变量名不要用拼音,变量名不要用拼音。全局变量尽量少用,按照你的要求,选择传参会更好。

          Neueste Downloads
          Mehr>
          Web-Effekte
          Quellcode der Website
          Website-Materialien
          Frontend-Vorlage
          Über uns Haftungsausschluss Sitemap
          Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!