目录
知识回顾
目标
函数的返回值
Tips
练习
编辑return的其它特性
任意类型的返回值
返回多个值
return的位置
小结
局部变量
局部变量的作用域
全局变量
全局变量的作用域
同名变量
pi的作用域
总结
知识回顾
在上篇博客中,我们学习给函数设置参数。在今天学习开始前,我们进行一个简单的复习。
假设,一位农场主想要统计多个正方形圈地的面积大小,来决定种植什么蔬菜水果。用代码该如何实现呢?没错,我们可以定义⼀个计算⾯积的函数,然后进行调用就行了。
如图,定义了计算圈地面积的函数,并进行调用。
那如果我们需要通过土地的面积大小来判断是否可以种植西瓜,能用刚才的函数呢?如图,调用函数计算边长为13的圈地面积,并判断其值是否大于160,此时程序会报错。这是因为函数内数据被直接输出,没有传递到函数外,没办法用getArea(13)
和160比较大小。
目标
也就是说,到目前为止,我们创建的函数都是对数据进行处理,处理后使用print
直接将结果输出。但是,在某些场景中,我们需要将函数处理的结果反馈回来,而非直接输出。那么今天,我们就来学习函数的返回值,并简单了解局部变量和全局变量。
函数的返回值
返回值的作用类似于下面的场景:
主管向员工下达命令,让其去打印文件,员工打印好文件后并没有完成任务,还需要将文件交给主管。
下面,我们一起来学习函数的返回值。
定义了函数getArea,参数length用于接收数据,其功能为计算正方形面积,并将结果返回。第7行,调用函数getArea,并将调用结果赋值给变量 result。第8行,输出变量 result。
# 定义一个函数getArea,传入参数length
def getArea(length):
area = length*length
return area
# 调用函数,再将结果赋值给变量result
result = getArea(13)
print(result)
return
关键字return,将函数内的数据返回到调用函数的位置。示例中,会将计算好的面积值返回给第7行的getArea(13)。
返回值
return后面是指定的返回值,返回值会返回到调用的地方。
调用有返回值的函数
当定义有返回值的函数时,调用函数的代码getArea(13)等同于一个"变量",用于保存函数的返回值169。
Tips
再次强调,当定义有返回值的函数时,调用函数的代码getArea(13)等同于一个变量。如图,如果我们只是调用该函数,不会有输出结果。我们可以使用print输出变量一样,将调用函数的代码输出。
练习
有返回值的函数
定义了一个叫做 "sayHello" 的函数,该函数包含 1 个参数 name。该函数的功能是将 "Hello!" 与 name 进行字符串拼接,赋值给变量 result,并将 result 返回。传入参数"Mary" 调用该函数,并输出。
字符串拼接示例:
print("Hello!" + "Mary")
输出结果:
Hello!Mary
参考代码:
# 定义函数sayHello(),传入参数name
def sayHello (name):
# 将"Hello!"与name字符串拼接,赋值给变量result
result = "Hello!"+name
# 返回变量result
return result
# 调用sayHello(),传入"Mary",并输出
print(sayHello("Mary"))
运行结果:
return的其它特性
刚才我们简单的了解了return的用法,它可以将函数内部的数据返回到函数外。除此以外,return还有一些其他重要的特性,让我们一起来了解一下吧~
任意类型的返回值
return的返回值没有类型限制,可以是一个变量名,一串字符串,甚至是一个表达式。如图,是返回一个表达式的示例。
返回多个值
如图所示,定义的函数用于计算出正⽅形的周长和面积,与我们刚才学到的函数不同,它返回了两个值。当函数要返回多个值时,返回值间以逗号,
隔开。此时函数的返回值,会以元组的格式返回。
return的位置
注意,return是函数结束的标志。函数内可以有多个return,但只要执行一次,整个函数就会结束运行。所以return的位置决定了函数能够执行到哪一步。
下面,我们以函数中有循环语句为例,来讲解return位置的重要性。
如图,函数内部有 for 循环,而return语句在循环外。在函数内,程序按照从上到下的顺序执行,所以程序会等 for 循环执行完毕后,再执行 return 语句。因此,最后函数返回了列表中全部元素的和6。
但是,如果 return 的位置在循环内部,当第1次循环时,就会执行到return语句。此时,整个函数就会结束运行,返回当前total的值1。
小结
至此,我们就学完了函数中return的常见用法。在这里,回顾一下 print 和 return 的区别。简单来说,使用print的函数,会将结果直接输出,是为了显示信息。使用return的函数,是为了返回结果。并且返回值可以用变量接走,继续使用该返回值做其它事。
那为什么不将函数中的数据保存到变量中,而是通过return将值返回到函数外呢?这是因为有些变量只在函数内有效,无法将数据传递到函数外。所以,我们使用函数时,要注意不同变量的有效范围,即变量的作用域。
局部变量
如图,我们在函数内定义并计算了变量area的值,但是在函数外print(area)
会出现area未定义的报错。这是因为,在函数内部定义的变量,只能在函数内使用,出了函数就不能使用。我们把这样的变量,称为局部变量。
定义了函数getArea,并调用该函数,最后输出。第3行,定义了一个新的变量area,并计算。
# 定义一个函数getArea,传入参数length
def getArea(length):
area = length*length
return area
# 传入参数13调用函数,并输出
print(getArea(13))
局部变量
简单来说,局部变量就是在函数内部定义的变量。局部变量只能在函数内部使用,出了函数就不能使用。
局部变量的作用域
全局变量
除了在函数内部定义变量,Python 还允许在所有函数的外部定义变量。我们把这样的变量,称为全局变量。
定义了全局变量pi和函数getArea,然后调用该函数并输出。
# 定义一个全局变量pi
pi = 3.14
# 定义一个函数getArea,传入参数radius
def getArea(radius):
area = pi*radius*radius
return area
# 传入参数2调用函数,并输出
print(getArea(2))
全局变量
简单来说,全局变量就是在函数外部定义的变量。全局变量不仅能在函数内部使用,也能在函数外部使用。
全局变量的使用
第5行的pi,虽然在函数内部,但是它只是被使用而非定义,所以它还是原来的全局变量。
注意:只有在函数内被定义的变量才是局部变量。
全局变量的作用域
同名变量
如图,第1和第3行都定义了变量pi,但是本质上他们不是同一个变量。
因为第3行的pi在函数内重新定义了,属于局部变量,不论如何赋值都不会影响到第1行的全局变量pi的值。
所以,建议对全局变量和局部变量使用不同的变量名。