定义函数
1. 基本语法
使用 def 语句定义函数,依次写出:函数名、括号、参数、冒号 :,然后在缩进块中写函数体;返回值用 return 返回。
def my_abs(x):
if x >= 0:
return x
else:
return -x
print(my_abs(-99)) # 99
2. return 语句
- 执行到
return时,函数立即结束,并将结果返回。 - 函数体内部可用条件判断、循环实现复杂逻辑。
- 没有
return时,函数执行完毕也会返回,结果为None;return None可简写为return。
3. 空函数:pass
- 用
pass定义“什么事也不做”的函数,作为占位符,让代码能先运行起来。
def nop():
pass
pass也可用在其他语句里(如if age >= 18: pass),缺少时该处会有语法错误。
4. 参数检查
| 情况 | 解释器行为 |
|---|---|
| 参数个数不对 | 自动检查并抛出 TypeError |
| 参数类型不对 | 不会自动检查;自定义函数可能在函数体内才报错,错误信息与内置函数不同 |
建议:对参数类型做检查时,用 isinstance(x, (int, float)),不符合时 raise TypeError('bad operand type')。
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
5. 返 回多个值
- 函数可以**“返回多个值”**:用逗号分隔,如
return nx, ny。 - 本质:返回的是一个 tuple;语法上可省略括号,多个变量按位置接收。
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny # 等价于 return (nx, ny)
# 接收方式一:多变量按位置接收
x, y = move(100, 100, 60, math.pi / 6)
# 接收方式二:得到一个 tuple
r = move(100, 100, 60, math.pi / 6) # r 是 (151.96..., 70.0)
记忆:返回多值 = 返回一个 tuple,写起来更方便。
6. 导入自定义函数
- 若函数定义保存在
abstest.py,可在该文件所在目录启动解释器,用from abstest import my_abs导入(abstest为文件名,不含.py)。
小结
| 要点 | 说明 |
|---|---|
| 定义 | def 函数名(参数): + 缩进函数体,用 return 返回 |
| return | 执行到即结束并返回;无 return 则自动返回 None |
| 空函数 | 用 pass 占位,避免语法错误 |
| 参数检查 | 个数不对解释器会报错;类型不对需用 isinstance() 检查并 raise TypeError |
| 返回多值 | 本质是返回一个 tuple,可省略括号,多变量按位置接收 |
练习:定义 quadratic(a, b, c),返回一元二次方程 ax²+bx+c=0 的两个解;求根公式 x = (-b±√(b²-4ac))/(2a),平方根用 math.sqrt()。