跳到主要内容

定义函数

1. 基本语法

使用 def 语句定义函数,依次写出:函数名括号参数冒号 :,然后在缩进块中写函数体;返回值用 return 返回。

def my_abs(x):
if x >= 0:
return x
else:
return -x

print(my_abs(-99)) # 99

2. return 语句

  • 执行到 return 时,函数立即结束,并将结果返回。
  • 函数体内部可用条件判断、循环实现复杂逻辑。
  • 没有 return 时,函数执行完毕也会返回,结果为 Nonereturn 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()