人人都能学编程
English 开始学习
课程 2 · Python 入门第 13 课 / 共 14 课免费阅读

def、参数与 return · Python 从零开始

怎样做出自己的、可以重复使用的工具:给它输入,它还你结果?

课程目录

为什么需要它

在机器人课里,你用 def 给一组指令起了名字。真正的函数更进一步:它接收参数 Parameter(输入),返回 Return 一个值(输出),就像 len("abc") 接收一个字符串、返回 3。函数让你能单独测试每一块、反复使用,也让程序更好读。

直觉理解

函数就像一台小机器:东西放进去,结果拿出来。

def area(width, height):
    return width * height

print(area(3, 4))
  • width 和 height 是参数 Parameter:输入的名字。
  • 在 area(3, 4) 里,3 和 4 是实参 Argument:实际传进去的值。
  • return 把一个值送回调用的地方,并结束函数。area(3, 4) 就变成了 12。

print 只是把值显示在屏幕上;return 是把值交回去,让程序继续使用。没有 return 的函数返回 None。

定义

参数与实参 Parameter / Argument

A parameter is a variable named in a function definition; an argument is the value passed to it when the function is called.
参数是函数定义里写的变量名;实参是调用函数时传给它的值。

返回值 Return value

The return statement ends a function and sends a value back to the caller; without it the function returns None.
return 语句结束函数并把一个值送回调用处;没有 return 的函数返回 None。

示例

有返回值的函数

动手试试

点一下 trace,看程序怎么跳转。

def area(width, height):
    return width * height

total = area(3, 4) + area(2, 5)
print(total)
逐步执行
  1. L1定义 area,还没有运行。
  2. L4调用 area(3, 4):width = 3,height = 4。width = 3, height = 4
  3. L2返回 12,area(3, 4) 就变成了 12。→ 12
  4. L4调用 area(2, 5) → 10;12 + 10 = 22。total = 22
  5. L5打印 22。22

print 不等于 return

动手试试

shout 只打印、不返回,所以 result 是 None。

def shout(word):
    print(word.upper())

def louder(word):
    return word.upper() + "!"

result = shout("hi")
print(result)
print(louder("hi"))
逐步执行
  1. L7shout 打印了 HI,但没有 return……HI
  2. L8……所以 result 是 None。None
  3. L9louder 返回 "HI!",再由 print 显示出来。HI!

常见错误

该 return 却写了 print

如果别的代码要用这个结果,就要 return。只会打印的函数没法参与计算。

return 后面的代码

return 会立即结束函数;同一代码块里写在它后面的行永远不会运行。

小测验

1. 这段代码会输出什么?

def f(x):
    return x * 2

print(f(3) + f(1))
  1. A
    8
  2. B
    62
  3. C
    f(3) + f(1)
查看答案

答案:A

f(3) 是 6,f(1) 是 2;6 + 2 = 8。

2. 这段代码会输出什么?

def g():
    print("hi")

result = g()
print(result)
  1. A
    hi
    None
  2. B
    hi
    hi
  3. C
    None
查看答案

答案:A

g 打印了 hi,但没有返回任何东西,所以 result 是 None。

动手练习

3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。

  1. 预测输出值的副本

    准确写出程序的输出。

  2. 改需求要 return,不要 print

    square 只是把结果打印出来,所以 square(4) + 1 会出错。改成 return n × n。

  3. 从零写偶数小工具

    写两个函数。is_even(n):n 是偶数就返回 True,否则返回 False。count_even(nums):返回列表里有几个偶数,而且要用到 is_even。

在互动课里练这一课

打开互动课,这些例子都能直接改、直接运行,练习题提交马上判题。免费开始,不用注册。

互动课按顺序解锁:前面的课还没学,会先带你到课程地图。

本课术语

术语中文英文定义
Parameter参数A name in a function definition that receives a value when the function is called.
Argument实参The actual value passed to a function in a call.
returnreturn 返回The statement that ends a function and sends a value back to the caller.
NoneNone 空值The value a function gives back when it has no return statement.