函数的定义:
def 函数名(参数1,参数2,参数3):
。。。注释。。。
函数体
return 返回值
函数在定义阶段只检测语法,不执行代码
调用函数
函数名()
理解:如果函数只是定义,没有执行,那么return会返回函数名字的内存地址。
定义函数的形式:
1.无参数
应用场景仅仅只是执行一些操作,比如与用户交互,打印
2.有参数
需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值
什么叫形参,形参就是在定义函数的时候给的,当调用函数的时候,形参是什么值,函数体内的实参是什么值。
调用函数步骤总结:
函数的调用:函数名加括号
1 先找到名字
2 根据名字调用代码
无return -----none
return 1个值----------返回一个值
return多个值----------返回元组
什么时候该有返回值?
调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不需要有返回值?
调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
通常无参函数不需要有返回值
注意:每次调用一次函数的时候都会从函数最开始的地方执行。想做到用生成器(yiled)
4种函数的类型
函数根据有没有参数,有没有返回值,可以相互组合,一共有4种:
无参数,无返回值
无参数,有返回值
有参数,无返回值
有参数,有返回值
函数的嵌套
def test1():
print(“this is func”)
def test2():
print(“this is func2”)
def test3():
print(“this is func3”)
test1()
test1()
*args的用法
#*args代表元组,可以传递多个变量
def test(*args):
print(args)
**kwargs的用法 字典
#**kwargs代表字段,要以key=value形式传入
def test(kwargs):
print(kwargs)
def test(a,b,c=33,args,**kwargs):
print(a)
print(b)
print©
print(args)
print(kwargs)
test(1,2,3,5,6,7,8,age = 99 ,name=‘zhangsan’)
如果传递了多余的参数(命名参数),多余参数不带变量名得传给args,带变量名得传给kwargs,并且以字典形式保存
test(a=1,b=2,c=3)
def test(*args,**kwargs):
print(args,kwargs)
test(1,2,3,a=4,b=5)
加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。
匿名函数
#匿名函数,没有名字的函数,方便快捷,一次定义一次调用
def test(x,y):
return x + y
res = test(1,2)
print(res)
res = lambda x,y: x+y
print(res(1,2))
x,y相当于形参,x+y相当于实参
自带return