• 内容概要
• 1. 函数简介
• 2. 函数的参数
• 3. 不定长参数
• 4. 参数的解包
**
1. 函数简介
**
• 函数也是一个对象
• 函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用
语法
def 函数名([形参1,形参2,形参3…]):
代码块
注意:
函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)
#创建函数
def f1 ():
#函数内部代码块打印我是函数f1,当函数被调用时打印
print('我是函数f1')
#调用函数f1
f1()
#输出 我是函数f1
print是函数对象 print()是调用函数
2. 函数的参数
2.1 形参和实参
• 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值
• 实参(实际参数)指定了形参,那么在调用函数时必须传递实参,实参将会赋值给对应的形参,简单来说有几个形参就要有几个实参
2.2 函数的传递方式
• 定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效
• 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
• 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递
• 混合使用位置参数和关键字参数的时候必须将位置参数写到关键字参数前面去
#一个有参数的函数,接收姓名并打印
#位置参数 形参和实参一一对用对应 实参第一个传给形参第一个
def f1(name,age,heigth,weigth):
print('姓名:%s,年龄:%d岁,身高:%dcm,体重:%dkg'%(name,age,heigth,weigth))
f1('张三',18,180,65)
#输出 姓名:张三,年龄:18岁,身高:180cm,体重:65kg
f1('李四',20,175,70)
#输出 姓名:李四,年龄:20岁,身高:175cm,体重:70kg
#关键字参数 传值会传到指定的关键字
def f1(name,age,heigth,weigth):
print('姓名:%s,年龄:%d岁,身高:%dcm,体重:%dkg'%(name,age,heigth,weigth))
#如果继续上面方法调用传参,姓名参数将会传给age,而age格式化输出是整数,就会报错
f1(name='张三',age=18,heigth=180,weigth=65)
#输出 姓名:张三,年龄:18岁,身高:180cm,体重:6kg
#打乱顺序传值
f1(age=20,name='李四',weigth=70,heigth=175)
#输出 姓名:李四,年龄:18岁,身高:180cm,体重:6kg
3. 不定长参数
• 定义函数时,可以在形参前面加一个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到一个元组中
• 带*号的形参只能有一个,可以和其他参数配合使用
• *形参只能接受位置参数,不能接受关键字参数
def f2(*name):
print(name)
f2('张三','李四')
#输出 ('张三', '李四')
f2(name='张三')
# TypeError: f2() got an unexpected keyword argument 'name'
#和其他参数配合 带*号的形参一定要在最后一个
#如果没在最后一个,传递到*号的时候,会把所有的实参保存到元组中,后边的形参将没有值传递,将会报错
def f2(gender,*name):
print(gender,name)
f2('男','张三','李四')
#输出 男 ('张三', '李四')
• **形参可以接收其他的关键字参数,它会将这些参数统一保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
• **形参只有一个,并且必须写在所有参数的后面
def f3(name,**names):
print(name)
print(names)
f3(name='李四',张三='男',小红='女')
#输出 李四
# {'张三': '男', '小红': '女'}
4. 参数的解包
**
• 传递实参时,也可以在序列类型的参数前添加星号,这样它会自动的将序列中元素依次作为参数传递
• 要求序列中的元素的个数必须和形参的个数一致
names=['张三',18,'男']
def f4(name,age,gender):
print(name,age,gender)
f4(*names)
#加*号序列的元素会依次传递给形参 和for循环打印列表一次打印一个元素相似
#不加*号
#会将names列表传递给第一个形参,后面的形参将没有实参传入
#序列数量和形参数量不一致
names=['张三',18,'男','老师']
def f4(name,age,gender):
print(name,age,gender)
f4(*names)
# TypeError: f4() takes 3 positional arguments but 4 were given