练习21--函数可以返回一些东西
一 函数返回值
1 定义:所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果
2 语法:使用return语句可以结束函数调用,并将运算结果返回
- 函数体中 return 语句有指定返回值时返回的就是其值
- 函数体中没有 return 语句时,函数运行结束会隐含返回一个 None 作为返回值,类型是 NoneType,与 return 、return None 等效,都是返回 None。
- 一个函数可以存在多条 return 语句,但只有一条可以被执行,如果没有一条 reutrn 语句被执行,同样会隐式调用 return None 作为返回值
- 如果函数执行了 return 语句,函数会立刻返回,结束调用,return 之后的其它语句都不会被执行了
3 返回值类型
- 无论定义的是返回什么类型,return 只能返回单值,但值可以存在多个元素。
- return [1,3,5] 是指返回一个列表,是一个列表对象,1,3,5 分别是这个列表的元素
- return 1,3,5 看似返回多个值,隐式地被Python封装成了一个元组返回
4 函数分类
- 无参数,无返回值:此类函数,不能接收参数,也没有返回值,一般情况下,打印提示灯类似的功能,使用这类的函数
- 无参数,有返回值:此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类函数
- 有参数,无返回值:此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数
- 有参数,有返回值:此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函数
二 代码
1 ex21.py
def add(a,b): # 定义一个函数add,用来计算两个数的和 print(f"ADDING {a} + {b}") # 把程序所做的操作打印出来 return a + b # 返回a+b的值 def subtract(a,b): # 定义一个函数add,用来计算两个数的差 print(f"SUBTRACTING {a} - {b}") # 把程序所做的操作打印出来 return a - b # 返回a-b的值 def multiply(a,b): # 定义一个函数add,用来计算两个数的乘积 print(f"MUTLIPLING {a} * {b}") # 把程序所做的操作打印出来 return a * b # 返回a*b的值 def divide(a,b): # 定义一个函数add,用来计算两个数的商 print(f"DIVIDING {a} / {b}") # 把程序所做的操作打印出来 return a / b # 返回a/b的值 print("Let's do some math with just functions") # 打印字符串,告诉用户现在正在做什么 age = add(30,5) # 调用add函数,并把函数的返回值赋给变量age height = subtract(78,4) # 调用subtract函数,并把函数的返回值赋给变量height weight = multiply(90,2) # 调用multiply函数,并把函数的返回值赋给变量weight iq = divide(100,2) # 调用devide函数,并把函数的返回值赋给变量iq print(f"Age:{age},Height:{height},Weight:{weight},IQ:{iq}\n") # 打印计算结果 # A puzzle for the extra credit,type it in anyway. print("Here is a puzzle.") # 打印字符串,提醒用户现在在做的事情 # 1 调用divide函数计算iq和2的商 # 2 把divide函数的返回值作为multiply函数的参数,得到他们两个的乘积,并返回 # 3 把multiply函数的返回值作为参数传给subtract函数,计算height和它的差,并返回 # 4 把subtract函数的返回值作为参数传给add函数,计算aga和它的和,并将函数返回值1赋给变量what what = add(age,subtract(height,multiply(weight,divide(iq,2)))) # 打印最终的计算结果 print("That becomes:",what,"Can you do it by my hand?\n") another = subtract(height,add(iq,divide(age,multiply(weight,3)))) print(f"{another}\n") exercise = add(24,subtract(divide(34,100),1023)) print(f"{exercise}\n")
程序讲解:
(1)以add函数为例:
- 1. 我们的函数是以两个参数被调用的: a 和 b 。
- 2. 我们把函数所做的事情打印出来,在本例中是 “ADDING”。
- 3. 然后我们让 Python 做一些反向的事情:我们返回 a + b 的和。你可以这样描述:我用 a 加上 b ,然后返回它们的结果。
- 4. Python 把这两个数加起来。然后当函数终止的时候,运行了这个函数的任何一行都能够将 a + b 的结果赋予一个变量。
(2)为什么 python 是是“从后往前”(backward)打印公式或者函数的?
-
它其实不是从后往前,它是从里到外(inside out)。当你开始把代码打乱成分开的公式和函数时,你会看到它是如何工作的。试着理解我说的 “inside out” 而不是 “backward” 。
2 运行结果
PS E:\3_work\4_python\2_code_python\02_LearnPythonTheHardWay> python ex21.py Let's do some math with just functions ADDING 30 + 5 SUBTRACTING 78 - 4 MUTLIPLING 90 * 2 DIVIDING 100 / 2 Age:35,Height:74,Weight:180,IQ:50.0 Here is a puzzle. DIVIDING 50.0 / 2 MUTLIPLING 180 * 25.0 SUBTRACTING 74 - 4500.0 ADDING 35 + -4426.0 That becomes: -4391.0 Can you do it by my hand? MUTLIPLING 180 * 3 DIVIDING 35 / 540 ADDING 50.0 + 0.06481481481481481 SUBTRACTING 74 - 50.06481481481482 23.935185185185183 DIVIDING 34 / 100 SUBTRACTING 0.34 - 1023 ADDING 24 + -1022.66 -998.66