Python · Day 10

函数、参数
与返回值

第十天,我第一次系统学习 Python 函数。函数可以把一段有明确用途的代码整理起来,通过名称重复调用,还可以接收信息并把结果送回程序。

定义函数和调用函数

def 用来定义函数。定义只是告诉 Python 这个功能包含哪些代码,真正执行它还需要在后面写出函数名和括号。

day10.py
def say_hello():
    print("你好,欢迎学习 Python!")
    print("今天开始学习函数。")

say_hello()

可以把定义函数理解为制作一个有名字的按钮,把调用函数理解为按下按钮。只有调用时,函数内部缩进的代码才会执行。

同一个函数可以重复调用

函数定义一次以后,可以调用很多次。每次调用都会从头执行函数内部的代码,因此不需要复制相同的 print()

day10.py
say_hello()
say_hello()
say_hello()

使用参数接收不同信息

参数写在函数名后面的括号中。调用函数时传入的内容,会按照位置交给对应的参数。

introduce.py
def introduce(name, days):
    print("你好,我是", name)
    print("我已经学习编程", days, "天了")

introduce("陌南", 10)

这里的 name 得到字符串,days 得到整数 10。多个参数之间使用逗号分隔,调用时也要按相同顺序提供信息。

把用户输入交给函数

传给函数的不一定是直接写出的文字或数字,也可以是保存了用户输入的变量。

introduce.py
user_name = input("请输入你的称呼:")
user_days = int(input("请输入学习天数:"))

introduce(user_name, user_days)

调用处的变量名不需要和函数参数名相同。Python 按照传入的位置和内容完成对应,而不是要求两边使用相同变量名。

使用 return 送出计算结果

print() 把内容显示在终端,return 则把结果送出函数,让其他代码继续保存、计算或判断。

calculate.py
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 送出的是计算得到的值,不会把变量名一起送出。

study_time.py
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 同样正确,并且在这个程序中更容易阅读。

学习时间计算器

最后,我把输入、整数转换、函数、返回值和条件判断组合起来,制作了学习时间计算器。

study_time.py
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 负责输出,函数让程序的结构比单纯从上到下堆叠代码更加清楚。