1.函数简介
- 函数也是一个对象
- 函数用来保存一些可以执行的代码,在需要,可以对这些代码进行多次调用
- 语法
def 函数名 ([形参1,形参2,形参3…]):
代码块
函数名()
- 函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)
- 函数名()是调用函数,函数名指的是函数对象
2.函数的参数
2.1形参和实参
- 形参:在函数内部声明变量,注意不是赋值
- 实参:指定形参,调用函数时传递实参,实参将赋值给对应的实参,简单来说有几个形参就要有几个实参
2.2参数的传递
- 定义形参时,可以为形参指定默认值。如果用户输入了实参,实参就覆盖默认值,否则默认值生效
- 位置参数:将对应位置的实参赋值给对应位置的形参
- 关键字参数:关键字参数可以不按照形参定义的顺序去传递,而是根据参数名进行传递
- 混合使用位置参数和关键字参数时,必须将位置参数写到关键字参数前面
def fn(a, b, c):
print('a = ', a)
print('b = ', b)
print('c = ', c)
fn(1, 2, 3)
fn(1, 2, c=3)
2.3不定长参数
- 定义函数时,可以在形参前加一个*,这样形参可以获取到所有的实参,它会将所有的实参保存到一个元组中
- 带*的形参只能有一个,可以和其他参数配合使用
- *形参只能接受位置参数,不能接受关键字参数
- **形参可以接受其他关键字参数,它可以将这些参数统一保存到字典中,字典的key就是参数名字,字典的value就是参数的值
- **形参只有一个,必须在其他参数的后面
def fn(*a):
print(a, type(a))
fn(10, 20, 30)
def fn(*a):
result = 0
for i in a:
result += i
print(result)
fn(10, 20, 30)
def fn(a, b, *c):
print('a = ', a, type(a))
print('b = ', b, type(b))
print('c = ', c, type(c))
fn(10, 20, 30, 40, 50)
def fn(**a):
print(a, type(a))
fn(a=1, b=2, c=3)
3.参数的解包
- 传递实参时,可以在序列类型的参数前添加*,这样它会自动将序列中的元素依次作为实参传递
- 序列中的元素个数必须和形参个数一致
def fn(a, b, c):
print('a = ', a, type(a))
print('b = ', b, type(b))
print('c = ', c, type(c))
t = (1, 2, 3)
fn(*t)
def fn(a, b, *c):
print('a = ', a, type(a))
print('b = ', b, type(b))
print('c = ', c, type(c))
t = (1, 2, 3, 4, 5)
fn(*t)