1.函数定义
- def
- 函数名
- ():
- 函数体
- 形式参数(非必须)
- 返回值(非必须)
2.函数的参数(传入方式)
2.1形参与实参
形式参数:函数定义时,定义的参数;实际参数:函数运行时传入的参数
2.2默认按照顺序的传入方式
#定义函数
def func(a, b):
pass
#执行函数 按顺序传入,a=1,b=2
func(1, 2)# a=1,b=2
2.3不按照顺序传入,以【形参=实参】的形式传入参数
#定义函数
def func(a, b):
pass
#以下两个执行过程等价
func(a = 1, b = 2)
func(b = 2, a = 1)
2.4默认参数
#定义函数,b默认等于2
def func(a, b = 2):
pass
#执行函数,可以只传a,默认b=2
func(1)#a = 1, b = 2
func(1, 3)#a = 1, b = 3
2.5动态参数
- 在形参前加【*】号,那么调用函数时,会把传入的不限个数的非键值对的实参整个为一个元组赋值给形参,
- 在形参前加【**】号,那么调用函数时,会把传入的不限个数的键值对形式的实参整个为一个字典赋值给形参
- 在定义函数时,单个【*】在前,【**】在后,通常这样的动态形参用以下变量名表示:【*args】,【**kwargs】
- 在定义函数时,如果还有非动态参数a,那么定义函数时,形参必须按以下顺序传入函数,(a,*args,**kwargs)
#只定义*args
def func(*args):
print(args)
func(1,2,'str',[3,4])#输出:(1, 2, 'str', [3, 4])
#定义**kwargs
def func(**kwargs):
print(kwargs)
func(k1 = 1, k2 = 'str')#输出:{'k1': 1, 'k2': 'str'}
#定义*args,**kwargs
def func(*args, **kwargs):
print(args, kwargs)
func(2,3,k1 = 1, k2 = 'str')#输出:(2, 3) {'k1': 1, 'k2': 'str'}
#定义a,*args,**kwargs
def func(a, *args, **kwargs):
print(a, args, kwargs)
func(1,2,3,k1 = 1, k2 = 'str')#输出:1 (2, 3) {'k1': 1, 'k2': 'str'}