函数:定义了之后可以在任何需要它的地方调用
返回值3种情况:
1:没有返回值
不写return
只写rerurn:结束一个函数的连续
return None
2:返回一个值
3:返回多个值(这里多个值可以用一个变量接收,也可以用多个变量接收
一个变量接收就是元祖)
1 def my_len(s): #自定义函数只需要0个参数,接收参数
2 pass
3 return 0 #返回值
4 s = '我们一起学习python'
5 ret = my_len(s) #传递参数:传参,实际参数,实参
6 print(ret)
顺序:位置参数,*args,默认参数,**kwargs
1:传多个参数
1 def my_sum(a, b): #位置参数
2 res = a+b
3 return res
4 ret = my_sum(2,1) #位置传参
5 ret1 = my_sum(b = 2, a = 1) #关键字传参
6 print(ret)
站在实参的角度上:
1.按照位置传参
2.按照关键字传参
3.混着用可以:但是必须先按照位置传参,再按照关键字传参,不能给不能给同一个变量传多个值
站在形参的角度上:
1.位置参数:必须传参数,且有几个参数传几个值
2.默认参数:可以不传,那么则默认,如果传了,则选择传的参数
1 def classmate(name,sex='男'):
2 print('{} : {}'.format(name,sex))
3
4 classmate('python','男')
5 classmate('java')
6 classmate('php','女')
2.动态求参的两种
第一种:
1 def func(*args, **kwargs):
2 print(args,kwargs)
3 func(1,2,3,4,5,a = 'aaa',b = 'bbb')#输出结果:(1, 2, 3, 4, 5) {'a': 'aaa', 'b': 'bbb'}
1:*args接收的是按照位置传参的值,组织成一个元祖
2:**kwargs接收的是按照关键字传参的值,组织成一个字典
3:args必须在kwargs之前
1 def sum(*args): #接收的是按照位置传参的值,组织成一个元祖
2 n = 0
3 for i in args:
4 n+=i
5 return n
6 print(sum(1,2))
第二种:
1 def func(*args): #站在形参的角度上,给变量加上*就是组合所有传来的值
2 print(args)
3
4 func(1,2,3,4,5) #输出结果:(1, 2, 3, 4, 5)
5 l = [1,2,3,4,5]
6 func(*l) #输出结果:(1, 2, 3, 4, 5)
7 #站在实参的角度上,给一个序列加上*就是将这个序列按照顺序打散,将其元素一个个传进去
8 #同理**配和kwargs
3:关于函数的注释:
def func():
'''
这个函数实现了什么功能
参数1:
参数2:
:return:是字符串或者列表的长度
'''
pass