09——Python函数
1. 函数简介
• 函数也是一个对象
• 函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用
语法
def 函数名([形参1,形参2,形参3…]):
代码块
def fn():
print('这是我的第一个函数')
fn() #这是我的第一个函数
print(fn) #<function fn at 0x000002BAFFDC1EA0>
注意:
函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)
print是函数对象 print()是调用函数
2. 函数的参数
2.1 形参和实参
• 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值
• 实参(实际参数)指定了形参,那么在调用函数时必须传递实参,实参将会赋值给对应的形参,简单来说有几个形参就要有几个实参
def s(a,b): #形参
a = 1
b = 2
print(a,'+',b,'=',a+b)
s(10,20) #实参
2.2 函数的传递方式
• 定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效
#指定了默认值以后,如果用户传递了参数默认值不会生效
def fn(a,b,c=20):
print('a =',a)
print('b =',b)
print('c =',c)
fn(1,2,3) #a = 1 b = 2 c = 3
#如果用户没有传递参数,默认值则生效
def fn(a,b,c=20):
print('a =',a)
print('b =',b)
print('c =',c)
fn(1,2) #a = 1 b = 2 c = 20
• 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
def fn(a=5,b=10,c=20):
print('a =',a)
print('b =',b)
print('c =',c)
fn(1,2) #a = 1 b = 2 c = 20
print(1,2,3) #1 2 3
fn() #a = 5 b = 10 c = 20
• 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递
def fn(a=5,b=10,c=20):
print('a =',a)
print('b =',b)
print('c =',c)
fn(b=1,c=2,a=3) #a = 3 b = 1 c = 2
• 混合使用位置参数和关键字参数的时候必须将位置参数写到关键字参数前面去
def fn(a=5,b=10,c=20):
print('a =',a)
print('b =',b)
print('c =',c)
fn(2,c=50) #a = 2 b = 10 c = 50
3. 不定长参数
• 定义函数时,可以在形参前面加一个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到一个元组中
def s(*a):
result = 0
for r in a:
result += r
print(result)
s(12,28) #40
s(520,1080,2048) #3648
• 带*号的形参只能有一个,可以和其他参数配合使用
def fn2(a,*b,*c):
print('a=',a)
print('b=',b)
print('c=',c)
fn2(1,2,3,4,5) #返回结果:报错 SyntaxError: invalid syntax
• 不定长参数不一定都要写在后面,但是注意,带*的参数后面的所有参数,必须以关键字形式来传递
def fn2(a,*b,c):
print('a=',a)
print('b=',b)
print('c=',c)
fn2(1,2,3,4,5) #返回结果:报错 TypeError: fn2() missing 1 required keyword-only argument: 'c'
• **形参可以接收其他的关键字参数,它会将这些参数统一保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
def fn3(**a):
print('a=',a)
fn3(b=2,c=3,d=1) #a= {'b': 2, 'c': 3, 'd': 1}
• **形参只有一个,并且必须写在所有参数的后面
4. 参数的解包
• 传递实参时,也可以在序列类型的参数前添加星号,这样它会自动的将序列中元素依次作为参数传递
• 要求序列中的元素的个数必须和形参的个数一致
def fn(a,b,c):
print('a=',a)
print('b=',b)
print('c=',c)
#创建一个元组
t = (20,30,40)
fn(*t) #a= 20 b= 30 c= 40
#创建一个字典,可以通过**来对字典进行解包
d = {'a':1,'b':2,'c':3}
fn(**d) #a= 1 b= 2 c= 3