python小白,关于函数问题

查看:116
本文介绍了python小白,关于函数问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

第一段代码:

# -*- 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()

第一段代码执行结果:

第二段代码:

# -*- 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()

第二段代码执行结果:

我有两个问题:
第一个问题:
为什么wendu = get_wendu()这一句语句,执行出来的结果是:您输入的温度是22,这不只是一个赋值的语句么? 类似 wendu = 22,这样一句赋值,不是不会打印出来么,为什么wendu = get_wendu() 会打印出结果,难道函数里面的print语句,会在赋值的过程当中把这个东西打印出来?
第二个问题:
为什么第一段代码里面wendu = wendu + 3是错误的,换成result = wendu + 3就能够成功执行?是不是因为wendu = wendu + 3这句话在执行的过程中,遇到print("您输入的新温度是%d"%wendu),系统无法分辨wendu到底是前面一个wendu还是后面一个wendu?

解决方案

你的第一个问题其实是不懂语句的执行,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变量就是引用了这个未定义的新变量,这自然而然的就造成了错误。

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

这篇关于python小白,关于函数问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆