1.函数的定义
def func():
2.函数的调用
func()
3.函数的返回值
#1.没有返回值 # (1)不写return # (2)只写return后面的代码不在继续执行,返回空,代表结束一个函数,跳到整个函数外面 # break 只是跳出函数内的循环内容 # (3)return None 结束 这个不常用 # 2.返回一个值 # (1) 可以返回任何数据类型 # (2)只要返回了,就可以接收了 # (3)如果一个程序有多个return 只返回一个 # 3.返回多个值 # 多个返回值用多个变量接收,有多少返回值,就用多少变量接收 # 用一个变量接收,返回元组
# def func(): # l = ['金老板','二哥'] # for i in l: # if i == '金老板': # return None # print('==========') # ret = func() # print(ret) # # # # def func(): # #return [1,2,3,4] # return False # print(func()) # # def func2(): # return 1,2 # print(func2()) # # r1,r2 = func2() # print(r1,r2)
3.函数的参数
函数定义和调用的时候
位置参数,*args,默认参数,**kwargs
1.没有参数,定义和调用函数时,括号内都不写内容
2.1个参数,传什么就是什么
3.多个参数
站在实参角度长
位置参数
按照关键字传
位置传和关键字传可以混用,必须先按照位置传参,然后按照关键字
ret = my_sum(a = 5,2)是不对的
不能给同一个变量传多个值
站在形参的角度上
位置参数:必须传,且有几个参数传几个,多传和少传都报错,
4.动态参数
*args接收按照位置传参的值,组织成一个元组
**args接收按照关键字传参的值,组织成一个字典
可以接收任意多个参数
*args 加*变成动态参数,参数名之前加*,习惯参数名用args
按照关键字传不行
如果有多个关键字参数需要调用,虚参用**kwargs
5.顺序 必须先定义位置参数,然后定义args,最后定义位置参数
参数名之前加**,习惯参数名kwargs
# def my_sum(a,b): # res = a + b # return resd # ret = my_sum(1,2) # print(ret) # ret = my_sum( 3,b = 6) # print(ret) # def classmate(name,sex = '男'): #默认参数,如果不传就用默认参数,如果传了,就传递传的值+ # #只有调用函数的时候 # #按照位置传: 直接写参数的值 # #按照关键字: 关键字 = 值 # #定义函数的时候: # #位置参数:直接定义参数 # #默认参数:关键字参数: 参数名 = ’默认值'-0 # #定义函数的时候,必须先定义位置参数,后定义默认参数 # print('{0}同学是{1},我爱{0}'.format(name,sex)) # classmate('二哥') # classmate('苍','女') # *args 动态参数 def sum(*args): n = 0 for i in args: n += i print(n) sum(1,2) sum(1,2,3) sum(1,2,3,4) ######### def func(**kwargs): print(kwargs) func(a = 1,b = 2,c = 4) def func(*args,default = 2,**kwargs): #先位置参数,后关键字参数,即args必须在kwargs之前 print(args,kwargs) func(1,2,3,4,5,default = 1, va = 'asdkfj;als',b = 'dsfjl')
动态参数的另外一种传参方式
def func(*args): #站在形参的角度上,给变量加上*,就是组合所有传来的值 print(args) func(1,2,3,4,5) l = [1,2,3,4,5] func(*l) #站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散 def func(**kwargs): print(kwargs) func(a = 1,b = 2) d = {'a' : 1,'b' : 2} func(**d)
函数的注释
def func(): ''' 这个函数实现了什么功能 参数1: 参数2: :return:是字符串或者列表的长度 ''' #默认参数的陷阱问题