函数(function)是一段可重复使用的代码,用来完成一个明确任务。你已经使用过很多内置函数(built-in function),例如 print()、len()、input()。现在我们开始学习如何定义自己的函数。
定义函数
函数定义使用 def。函数可以接收输入,也可以返回输出。括号里的 num1 和 num2 是参数(parameter),调用函数时传进去的 4、12 这类具体值叫实参(argument)。
def larger(num1, num2):
if num1 > num2:
return num1
else:
return num2
print(larger(4, 12))
print(larger(54, 33))运行结果:
12
54return 的作用是把结果交回给调用者(caller)。函数执行到 return 后,本次函数调用就结束了。
知识测验
没有返回值的函数
有些函数只负责执行动作,不需要返回结果。例如打印一个简单棋盘:
def print_board():
for i in range(3):
for j in range(2):
print(" |", end='')
print()
if i < 2:
print("---+---+---")
print_board()运行结果:
| |
---+---+---
| |
---+---+---
| |这类函数没有显式写 return。Python 会默认返回 None,表示“没有有意义的返回值”。
函数调用
函数调用(function call)发生时,程序会暂时离开当前位置,进入被调用函数的函数体(function body)内部执行。函数结束后,程序再回到原来的位置继续执行。这个“进入与返回”的过程可以用调用栈(call stack)理解。
调用者 → 函数 → 返回值
解锁完整互动实验、进阶解析与精选参考答案。
下面的程序用函数拆分“两点间距离”的计算。
import math
def square(x):
return x ** 2
def distance(point1, point2):
x1, y1 = point1
x2, y2 = point2
return math.sqrt(square(x1 - x2) + square(y1 - y2))
def read_point(message):
raw = input(message)
x_text, y_text = raw.split(",")
return float(x_text), float(y_text)
x1, y1 = read_point("请输入第一个点,例如 0, 0:")
x2, y2 = read_point("请输入第二个点,例如 3, 4:")
print("距离:%.1f" % distance((x1, y1), (x2, y2)))一次可能的运行结果:
请输入第一个点,例如 0, 0:0, 0
请输入第二个点,例如 3, 4:3, 4
距离:5.0嵌套调用:distance() 两次请求 square()
解锁完整互动实验、进阶解析与精选参考答案。
知识测验
main()
很多语言使用 main() 作为程序入口(entry point)。Python 不强制要求 main(),但在稍大的程序里使用 main() 可以让结构更清晰。
def main():
print("程序开始")
if __name__ == "__main__":
main()当文件被直接执行时,__name__ 的值是 "__main__",因此 main() 会被调用。
写一个计算绝对差的函数
编写 absolute_difference(num1, num2),返回两个数差值的绝对值。
- 定义函数。
- 使用 if/else 返回非负差值。
- 至少打印两组调用结果。
写一个判断素数的函数
把素数判断封装进可复用的 is_prime(n)。
- n <= 1 时返回 False。
- 检查到 sqrt(n)。
- 在 main() 中读取并输出结果。
计算一年中的第几天
拆出 is_leap、days_in_month 和 day_of_year 三个函数。
- 实现闰年判断。
- 返回每个月天数。
- 让 day_of_year 和 main 调用辅助函数。