函数
定义函数
def是定义函数的关键字,定义函数的过程如下:def 函数名(参数): return 参数
空函数
教程里提到这个知识点“空函数”,也就是什么都不做的函数,使用到一个关键字pass
,它的意思是什么也不做,但代码也能运行。也可以看做是一个占位符,比如一段代码,还没有想好怎去写,这时候就可以在这个位置写上pass
,可以让代码先运行起来。def nop(): pass
- 参数检查
参数检查的作用在于,能控制用户传入函数的参数,并做出响应。
比如说一个做加法运算的函数,基本功能是需要传入两个int型参数,但是用户如果传入的是非int型,那么会报Python内置的错误。
使用参数检查,能限制参数类型,自定义错误信息,让函数调用者更清楚报错原因。
>>> def myabs(x):
... if not isinstance(x,(int,float)):
... raise TypeError('bad operand type')
... if x >= 0:
... return x
... else:
... return -x
做参数检查后,调用这个函数者就只能传入int和float,否则就会报自定义的错误信息:bad operand type
- 返回多个值
我们先来看看返回多个值的代码:(这个代码是教程里的案例)
def move(x,y,step,angle=0):
... nx = x + step * math.cos(angle)
... ny = y + step * math.sin(angle)
... return nx,ny
然后我调用这个函数,并用两个变量接收,然后打印出来:
>>> x,y = move(100,100,60,math.pi / 6)
>>> print(x,y)
151.96152422706632 130.0
△ 值得注意的是,其实用一个变量去接收也可以,因为这种多个返回值的函数返回值的本质是tuple
类型:
>>> r = move(100,100,60,math.pi / 6)
>>> print(r)
(151.96152422706632, 130.0)
函数练习题
写一个解一元二次方程的函数
开平方根函数math.sqrt(x)
, 需要导入math包import math
解题思路:
1. 计算判别式△=2b-4ac的值
2. 根据△的结果判断一元二次方法有无根
3. 有根的情况下将abc的值代入求根公式x=[-b±(b^2-4ac)^(1/2)]/2a
def myQuadratic(a,b,c):
for i in [a,b,c]:
if not isinstance(i,(int,float)):
raise TypeError('bad poerand type',i)
m = b * b - 4 * a * c
if m < 0:
return '此方程无解!'
elif m == 0:
x1 = x2 = -b / 2 * a
print('此方程有2个相同的实根:')
elif m > 0:
x1 = (-b + math.sqrt(m)) / 2 * a
x2 = (-b - math.sqrt(m)) / 2 * a
print('此方程有2个不同的实根:')
return x1 , x2