函数一
初始函数:
s = ‘好好学习’ def my_len(): #定义函数(声明函数) i = 0 for k in s: #中间部分只有函数调用时才会执行 i += 1 print(i) my_len() #调用函数
此函数的特点:定义了之后可以在任何需要它的地方调用;没有返回值,只是单纯的打印
自定义函数:
def my_len(): i = 0 for k in s: i += 1 return i #返回值 length = my_len() #函数调用
返回值的三种情况:
返回一个值:可以返回任何数据类型,只要返回就可以接收到
返回多个值:多个返回值用多个变量接收,有几个值就用几个变量;用一个变量接收得到的是一个元组。
没有返回值:①不写return
②只写return:结束一个函数的继续
③return None
如果再一个程序中有多个return,则只执行第一个。
形参和实参:
def my_len(s): #自定义函数,接收参数;形参 i = 0 for k in s: i += 1 return i ret = my_len(s) #参数传递;实参 或者 ret = my_len('加油') #把‘加油’传给def my_len(s)中的s print(ret)
参数:①没有参数(定义函数和调用函数时括号里都不写内容)
②有一个参数(传什么就是什么)
③有多个参数:
站在实参的角度上:
①按位置传参数(按位置传递1—>a 2-->b)
②按关键字传参(如:ret = my_len(b=1,a=2)
③混着用可以但是必须先按照位置传参,再按照关键字,不能给同一个变量传多个值
站在形参的角度上:
①位置参数(必须传而且有几个参数传几个值)
②默认值参数:可以不传,如果不传就默认,传了就用传的
只有调用函数时:
①按位置传:直接写参数的值
②按关键字传:关键字 = 值
定义函数时:
①位置参数:直接定义参数
②默认参数(关键字):参数名 = 默认值
③顺序:必须先定义位置参数,再*args,再定义默认参数,最后**kwargs
④动态参数:有多少个参数都可以;
def sum(*args): n = 0 for i in args: n += i return n print(sum(1,2)) #结果:3 print(sum(1,2,3,4)) #结果:10
动态参数:
*args:可以接收按照位置传参的值,组成一个元组,但不能接收关键字参数。
**kwargs:可以接收多个咱找关键字传来的参数,组成一个字典(*args必须再**kwargs之前)
def func(**kwargs): print(kwargs) func(a=1,b=2,c=3) func(a=1,b=2) func(a=1) #结果:{'a':1,'b':2,'c':3} {'a':1,'b':2} {'a':1}
动态参数的另一种传参方式:
站在实参的角度上:给一个序列(列表,元组)加上*,就是将这个序列按顺序打散
站在形参的角度上:给变量加上*就是组合所有传来的值
def func(*args); print(args) li = [1,2,3,4] func(*li) #结果:(1,2,3,4)
函数的注释:
def func(): ''' 参数1: 参数2: :return:返回值时啥 ''' pass