一、定义函数语法:
def 函数名(参数):
函数体
return 返回值
二、函数特点:
1、关键字def define
2、参数可以为空,也可以是多个/一个
3、return不是必须要有的
4、return所引导的返回值也不是必须要有的
三、函数的参数
1、形参:就是定义在函数括号里的参数,无实际意义,存在的作用就是告知代码调用此函数时,需要传入进来具体的值,进行运算
2、实参:就是调用函数时传入的参数,是真正参与运算的参数
注意:可变数据类型,如果在函数中被修改了值,则主程序中的值也跟着变化了
不可变数据类型,如果在函数中被修改了值,则主程序中的值不会变化
例:
# 形参,实参
def canshu(name, age, sex): # 括号里的就是形参
print('他叫%s,%s,今年%d岁' % (name, sex, age))
return
canshu('张三', 18, '男') # 括号里的就是实参
3、必备参数,参数必须已正确的位置顺序传入,也叫位置参数,从左到右依次匹配,对位置和参数个数都有要求,像代码实参里的年龄与性别得与形参一一对应
例:
def bibei(name, age, sex):
print('他叫%s,%s,今年%d岁' % (name, sex, age))
return
bibei('张三', 13, '男')
4、关键字参数,传入的实参以形参名=值的样式传入,实参里传入的形参名必须与函数里的形参名一致,调用函数时若使用关键字参数,可以不按顺序传入
例:
def gjian(name, age, sex):
print('他叫%s,%s,今年%d岁' % (name, sex, age))
return
gjian(sex='女', name='沾上干', age=22)
5、缺省参数,必须放在必备参数后面。即在函数里给形参赋予了初始值,如果实参也传入了值优先取实参传入值,不传则取函数里的初始值
注意:重复调用函数,默认形参会继承之前一次调用结束之后该形参的值
例:
def quesheng(sex, name='李四', age=13, list1=[]):
print('他叫%s,%s,今年%d岁' % (name, sex, age))
list1.append(sex)
print(l)
return
quesheng('男', 'name')
quesheng('女', '互换')
他叫name,男,今年13岁
['男']
他叫互换,女,今年13岁
['男', '女'] # 这里就是说重复调用函数,默认形参会继承之前一次调用结束之后该形参的值
Process finished with exit code 0
6、不定长参数,必须放在必备参数、缺省参数后面,当需要一个函数能处理比当初声明时更多的参数。这些参数叫做收集参数。
不定长参数又分为两类:
*:表示一个元组 *arvg
**:表示一个字典 **kwarvg
例1:
# 如果函数形参位置,既有必备参数又有不定长参数
def test_bu(num1, sit = 1, *tup, **dic):
print(num1)
print(tup)
print(dic)
return
"""
不定长参数:匹配,用户在实际调用中有传入多个值的需求,但是开发人员又无法在函数定义时预留足够长的位置
"""
test_bu(1, 2, [1,2,3], 4, 5, 6, 7, 8, 9, 0, name='age', age=18, addr='上海')
# 希望传入函数的不仅仅是值,而是键值对
1
([1, 2, 3], 4, 5, 6, 7, 8, 9, 0)
{'name': 'age', 'age': 18, 'addr': '上海'}
Process finished with exit code 0
例2:
# 写一个函数,实现求最大值,需要用户将要进行求最大值的参数逐个传递进来
def test_max(*args, **kwargs): # 元组是序列
print(max(args))
test_max(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
10
Process finished with exit code 0