函数
调用函数
略
定义函数
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
def my_abs(x):
if x >= 0:
return x
else:
return -x
print(my_abs(-1000))
保存上述代码后,可以直接在交互器里直接调用
>>> from exc1 import my_abs
>>> 1000
1000
>>> from exc1 import my_abs
>>>
>>> -100
-100
空函数
使用pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
if age >= 18:
pass
参数检查
参数数量不对,py解释器可以自查
>>> my_abs(1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: my_abs() takes 1 positional argument but 2 were given
>>>
但是如果参数类型不对,Python解释器就无法检查
>>> my_abs('A')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in my_abs
TypeError: unorderable types: str() >= int()
>>> abs('A')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'
可以加入参数检查
def my_abs(x):
if not isinstance(x,(int,float)):
raise typeerror('bad operand type')
if x >= 0:
return x
else:
return -x
print(my_abs(-1000))
示例
import math
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)
import math
def quadratic(a,b,c):
if (b**2)-(4*a*c) < 0:
print('此方程无解')
else:
x1 = ((-b) + math.sqrt((b**2)-(4*a*c)))/(2*a)
x2 = ((-b) - math.sqrt((b**2)-(4*a*c)))/(2*a)
return (x1,x2)
a = int(input('请输入a的值:'))
b = int(input('请输入b的值:'))
c = int(input('请输入c的值:'))
print(quadratic(a,b,c))
函数的参数
位置参数
以下代码举例
def power(x):
return x * x
print(power(4))
对于power(x)函数,参数x就是一个位置参数。
当调用power函数时,必须传入有且仅有的一个参数x,但是当调用三次方以及更多时可以将power(x)修改为power(x,n)
def power(x,n):
return x ** n
print(power(4,4))
修改后的x,n为两个参数,会按照位置分别传递给x及n
默认参数
以下段代码为例,当我们调用函数时,少输入了一个位置参数n,这个时候可以将n设为默认参数
def power(x,n):
return x ** n
print(power(12))
//程序报错
File "exc1.py", line 3, in <module>
print(power(12))
TypeError: power() missing 1 required positional argument: 'n'
def power(x,n=2):
return x ** n
print(power(12))
以上为例子,默认参数的存在可以简化函数的调用,但是设置默认参数需要注意以下几点:
1、必选参数在前,默认参数在后,否则Python的解释器会报错
2、函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数
可变参数
在Python函数中,还可以定义可变参数。可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
要定义这个函数,我们必须要确定参数的个数,以list或者tuple的形式来进行传参
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc([1, 2, 3])
14
>>> calc((1, 3, 5, 7))
84
如果利用可变参数我们可变化问为如此
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1, 2, 3)
14
>>> calc(1, 3, 5, 7)
84
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数.