函数、参数
与返回值
第十天,我第一次系统学习 Python 函数。函数可以把一段有明确用途的代码整理起来,通过名称重复调用,还可以接收信息并把结果送回程序。
定义函数和调用函数
def 用来定义函数。定义只是告诉 Python 这个功能包含哪些代码,真正执行它还需要在后面写出函数名和括号。
def say_hello():
print("你好,欢迎学习 Python!")
print("今天开始学习函数。")
say_hello()
可以把定义函数理解为制作一个有名字的按钮,把调用函数理解为按下按钮。只有调用时,函数内部缩进的代码才会执行。
同一个函数可以重复调用
函数定义一次以后,可以调用很多次。每次调用都会从头执行函数内部的代码,因此不需要复制相同的 print()。
say_hello()
say_hello()
say_hello()
使用参数接收不同信息
参数写在函数名后面的括号中。调用函数时传入的内容,会按照位置交给对应的参数。
def introduce(name, days):
print("你好,我是", name)
print("我已经学习编程", days, "天了")
introduce("陌南", 10)
这里的 name 得到字符串,days 得到整数 10。多个参数之间使用逗号分隔,调用时也要按相同顺序提供信息。
把用户输入交给函数
传给函数的不一定是直接写出的文字或数字,也可以是保存了用户输入的变量。
user_name = input("请输入你的称呼:")
user_days = int(input("请输入学习天数:"))
introduce(user_name, user_days)
调用处的变量名不需要和函数参数名相同。Python 按照传入的位置和内容完成对应,而不是要求两边使用相同变量名。
使用 return 送出计算结果
print() 把内容显示在终端,return 则把结果送出函数,让其他代码继续保存、计算或判断。
def add(number1, number2):
result = number1 + number2
return result
answer = add(8, 2)
print("计算结果是:", answer)
print("结果乘以2是:", answer * 2)
函数返回整数 10,变量 answer 接住它以后还能继续进行乘法,最终得到 20。
函数内外的变量名可以不同
练习中,我注意到函数内部使用了 total_minutes,函数外最初使用了 total。后来弄懂:return 送出的是计算得到的值,不会把变量名一起送出。
def calculate_time(days, minutes_per_day):
total_minutes = days * minutes_per_day
return total_minutes
total = calculate_time(10, 60)
上面的 total 会正确接住 600。把函数外变量也命名为 total_minutes 同样正确,并且在这个程序中更容易阅读。
学习时间计算器
最后,我把输入、整数转换、函数、返回值和条件判断组合起来,制作了学习时间计算器。
def calculate_time(days, minutes_per_day):
total_minutes = days * minutes_per_day
return total_minutes
study_days = int(input("请输入学习天数:"))
daily_minutes = int(input("请输入每天学习多少分钟:"))
total_minutes = calculate_time(study_days, daily_minutes)
print("你一共学习了", total_minutes, "分钟")
if total_minutes >= 600:
print("累计学习时间已经达到10小时!")
else:
print("继续坚持,累计学习时间会越来越多!")
输入 10 天、每天 60 分钟时得到 600,进入第一个分支;输入 5 天、每天 60 分钟时得到 300,进入 else 分支。两个边界方向都测试成功。
今天真正弄懂了什么
- 使用
def定义函数,使用函数名和括号调用函数 - 定义函数不会自动执行,调用才会运行函数内部代码
- 函数可以重复调用,避免重复编写同一段功能
- 参数把信息送进函数,多个参数按照位置对应
return把结果送出函数,返回值可以继续参与运算- 函数内部和外部接收返回值的变量名不必相同
- 函数可以和输入、类型转换及条件判断组合使用
今天开始把代码整理成有名字的功能。参数负责输入,return 负责输出,函数让程序的结构比单纯从上到下堆叠代码更加清楚。