函数的优点
1.代码重用
2.保持一致性,易维护
3.可扩展性强
函数的基本形式
1 def函数名():2 pass
3 return 返回值
函数的返回值
无返回值
1 #函数定义
2 defmylen():3 """计算s1的长度"""
4 s1 = "hello world"
5 length =06 for i ins1:7 length = length+1
8 print(length)9
10 #函数调用
11 str_len =mylen()12 #因为没有返回值,此时的str_len为None
13 print('str_len : %s'%str_len)14
15 不写return
1 deffunc():2 print(111)3 return
4 print(222)5 func()6 #输出:111
不写return返回None,只写return,后面不写其他内容,也会返回None,有的同学会奇怪,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,就是一旦遇到return,结束整个函数
一个返回值
1 #函数定义
2 defmylen():3 """计算s1的长度"""
4 s1 = "hello world"
5 length =06 for i ins1:7 length = length+1
8 returnlength9
10 #函数调用
11 str_len =mylen()12 print('str_len : %s'%str_len)13
14 返回一个值
多个返回值
可以返回任意多个、任意数据类型的值
1 defret_demo1():2 '''返回多个值'''
3 return 1,2,3,4
4
5
6 defret_demo2():7 '''返回多个任意类型的值'''
8 return 1,['a','b'],3,4
9
10 ret1 =ret_demo1()11 print(ret1)12 ret2 =ret_demo2()13 print(ret2)14
15 返回多个值
返回的多个值会被组织成元组被返回,也可以用多个值来接收
1 defret_demo2():2 return 1,['a','b'],3,4
3
4 #返回多个值,用一个变量接收
5 ret2 =ret_demo2()6 print(ret2)7
8 #返回多个值,用多个变量接收
9 a,b,c,d =ret_demo2()10 print(a,b,c,d)11
12 #用多个值接收返回值:返回几个值,就用几个变量接收
13 a,b,c,d =ret_demo2()14 print(a,b,c,d)15
16 多个返回值的接收
函数的参数
现在,我们已经把函数返回值相关的事情研究清楚了,我们自己已经完成了一个可以返回字符串长度的函数。但是现在这个函数还是不完美,之前我们使用len函数的时候得是length = len("hello world"),这样我可以想计算谁就计算谁的长度。但是现在我们写的这个函数,只能计算一个“hello world”的长度,换一个字符串好像就是不行了。这可怎么办?
1 #函数定义
2 defmylen(s1):3 """计算s1的长度"""
4 length =05 for i ins1:6 length = length+1
7 returnlength8
9 #函数调用
10 str_len = mylen("hello world")11 print('str_len : %s'%str_len)12
13 带参数的函数
我们告诉mylen函数要计算的字符串是谁,这个过程就叫做 传递参数,简称传参,我们调用函数时传递的这个“hello world”和定义函数时的s1就是参数。
实参与形参
参数还有分别:
我们调用函数时传递的这个“hello world”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。
定义函数时的s1,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。
传递多个参数
参数可以传递多个,多个参数之间用逗号分割。


1 defmymax(x,y):2 the_max = x if x > y elsey3 returnthe_max4
5 ma = mymax(10,20)6 print(ma)
传递多个参数
位置参数
站在实参角度
1.按照位置传值


1 defmymax(x,y):2 #此时x=10,y=20
3 the_max = x if x > y elsey4 returnthe_max5
6 ma = mymax(10,20)7 print(ma)8
9 按照位置传参
View Code
2.按照关键字传值


1 defmymax(x,y):2 #此时x = 20,y = 10
3 print(x,y)4 the_max = x if x > y elsey5 returnthe_max6
7 ma = mymax(y = 10,x = 20)8 print(ma)9
10 按照关键字传参
View Code
3.位置、关键字形式混着用


1 defmymax(x,y):2 #此时x = 10,y = 20
3 print(x,y)4 the_max = x if x > y elsey5 returnthe_max6
7 ma = mymax(10,y = 20)8 print(ma)9
10 位置、关键字混用传参
View Code
默认参数
1.正常使用
使用方法
为什么要有默认参数:将变化比较小的值设置成默认参数
2.默认参数的定义


1 def stu_info(name,sex = "male"):2 """打印学生信息函数,由于班中大部分学生都是男生,3 所以设置默认参数sex的默认值为'male'4 """
5 print(name,sex)6
7
8 stu_info('alex')9 stu_info('eva','female')10
11 默认参数
View Code
3.参数陷阱:默认参数是一个可变数据类型
View Code
动态参数
按位置传值多余的参数都由args统一接收,保存成一个元组的形式


1 def mysum(*args):2 the_sum =03 for i inargs:4 the_sum+=i5 returnthe_sum6
7 the_sum = mysum(1,2,3,4)8 print(the_sum)9
10 *args求和函数应用
*args


1 def stu_info(**kwargs):2 print(kwargs)3 print(kwargs['name'],kwargs['sex'])4
5 stu_info(name = 'alex',sex = 'male')
**kwargs