1、函数初识
函数定义了之后,可以在任何需要它的地方调用
# 函数基本格式 def mylen(): s1 = 'Hello SharkJiao' length = 0 for i in s1: length += 1 return length print('str_len:%s'%(mylen()))
2、函数的返回值
1)没有返回值——返回None
不写return
只写return:结束一个函数的继续
return None —— 不常用
def mylen(): s1 = 'Hello SharkJiao' length = 0 for i in s1: length += 1 print(length) print('str_len:%s'%(mylen())) # 因为没有返回值,此时的mylen()为None
def ret_demo(): print(1) return print(2) print(ret_demo()) # 只写return,后面不写其他内容,也会返回None
# 函数一旦运行到return,结束整个函数
def ret_demo(): print(1) return None print(2) print(ret_demo()) # return None:和上面的两种情况一样,我们一般不这样写。
2)返回1个值
可以返回任何数据类型
只要返回就可以接收到
如果在一个程序中有多个return,那么只执行第一个
3)返回多个值
用多个变量接收,有多少返回值就用多少变量接收
用一个变量接收,得到的是一个元祖
# 可以返回任意多个、任意数据类型的值 def demo1(): return 1,2,3,4 # 返回多个值 def demo2(): return 1,['a','b'],3,4 # 返回多个任意类型的值 ret1 = demo1() print(ret1) ret2 = demo2() print(ret2)
def demo2(): return 1,['a','b'],3,4 ret2 = demo2() print(ret2) # 返回多个值,用一个变量接收 a,b,c,d = demo2() print(a,b,c,d) # 返回多个值,用多个变量接收 # 用多个值接收返回值:返回几个值,就用几个变量接收
3、实参
1)按照位置传值
def mymax(x,y): #此时x=10,y=20 the_max = x if x > y else y return the_max ma = mymax(10,20) print(ma)
2)按照关键字传值
可以混用 位置参数必须在关键字传参之前
不能对一个参数重复赋值
def mymax(x,y): #此时x = 20,y = 10 print(x,y) the_max = x if x > y else y return the_max ma = mymax(y = 10,x = 20) print(ma)
3)位置、关键字形式混着用
def mymax(x,y): #此时x = 10,y = 20 print(x,y) the_max = x if x > y else y return the_max ma = mymax(10,y = 20) print(ma)
注意: 位置参数必须在关键字参数的前面
对于一个形参只能赋值一次
4、形参
1)位置参数必须传值
def mymax(x,y): #此时x = 10,y = 20 print(x,y) the_max = x if x > y else y return the_max #调用mymax不传递参数 ma = mymax() print(ma) # TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'
2)默认参数
将变化比较小的值设置成默认参数
def stu_info(name,sex = "male"): """打印学生信息函数,由于班中大部分学生都是男生, 所以设置默认参数sex的默认值为'male' """ print(name,sex) stu_info('alex') stu_info('eva','female')
3)参数陷阱
默认参数是一个可变数据类型,那么每一次调用函数的时候,如果不传值就公用这个数据类型的资源
def defult_param(a,l = []): l.append(a) print(l) defult_param('alex') defult_param('egon')
4)动态参数
按位置传值多余的参数都由args或者kwargs统一接收,保存成一个元组的形式
*args:可以接收任意多个位置参数
def mysum(*args): the_sum = 0 for i in args: the_sum+=i return the_sum the_sum = mysum(1,2,3,4) print(the_sum)
**kwargs :可以接收多个关键字参数
def stu_info(**kwargs): print(kwargs) print(kwargs['name'],kwargs['sex']) stu_info(name = 'alex',sex = 'male')
5)函数的参数的顺序
位置参数:必须传
*args:可以接收任意多个位置参数
默认参数:可以不传
*kwrags:可以接收多个关键字参数
5、相关练习