一、定义函数的的三种形式
1.无参函数:函数不需要传参数
2.有参函数:函数需要传递参数来运行
3.空函数:函数内容为空,用pass代替,主要用于构思阶段
二、调用函数的三种形式
1.语句形式
def foo():
print('hello world')
foo()
2.表达式形式
def foo(x,y):
res=x+y
return res
print(foo(1,2))
3.可以当做参数传给另一个函数
def max1(x,y):
if x>y:
return x
else:
return y
print(max1(1,2),3)
三、函数的返回值
注意点:1.返回值没有类型限制
2.返回值没有个数限制:(1)返回一个值:调用函数拿到的结果就是一个值
(2)返回多个值:调用函数拿到的结果是一个元组
(3)返回0个值,或是不写return:调用函数的结果就是None
return关键字:return是函数结束的标志,函数内可以有多个return,但只要执行一次,整个函数就结束
四、函数参数的
形参:指的是定义函数阶段括号内指定变量名,即形参本质就是“变量名”
实参:指的是调用函数阶段括号内传入的值,即实参本质就是“值”
形参与实参的关系:在调用函数时,会将实参赋值给形参,这种绑定关系在函数调用时临时生效,在调用结束后就失效了
形参与实参的具体分类:1.位置形参:在定义函数阶段按照从左到右的顺序依次定义的形参,称之为位置形参
注意:按照位置形参定义,必须被传值,不能多或者少
2.位置实参:在调用函数阶段按照从左到右的顺序依次传入的值,称之为位置实参
注意:按照位置定义的实参,会与形参一一对应
3.关键字参数(关键字实参):在调用阶段,按照key=value的形式指名道姓地为形参传值
注意:1.可以完全打乱顺序,但仍然能只能为指定的形参传值
2.可以混合使用位置实参与关键字实参,但是要注意:位置实参必须要放到关键字实参的前面;不能对一个形参重复赋值
默认参数:指的是定义在函数阶段,就已经为某个形参赋值了,改形参为有默认值的形参,简称默认形参
注意:1.在定义阶段已经被赋值,意味着在调用阶段可以不用为其赋值
2.位置形参应该放在默认参数前面
3.默认参数的值在函数定义阶段已经固定
4.默认参数的值通常应该是不可变类型
位置形参VS默认形参:对于大多数情况下,传的值都是不相同的,应该定义为位置形参
对于大多数情况下,传的值都是相同的,应该定义为默认形参
可变长度的参数:站在实参的角度,参数长度可变指的是在调用函数时,传入的实参值的个数不固定
而实参的定义方式无法两种:位置实参,关键字实参,对应着形参也必须有两种解决方案*与**类,分别应对溢出的位置实参与关键字实参
1.在形参中*:会将调用函数时溢出位置实参保存成元组的形式,然后赋值*后的变量名
2.在实参中带*:但凡在实参中带*的,在传值前,都先将其打散成位置参数,再进行赋值
3.在形参中带**:会将调用函数时溢出的关键字实参保存成字典的形式,然后赋值**后的变量名
4.在实参中带**:但凡在实参中带**的,在传值前都先将其打散成关键字实参,在进行赋值
5.规范:在形参中带*与**的,*后的变量名应该是args,**后的变量名应该是kwargs
命名关键字参数:放到*和**之间的参数称为命名关键字参数 注意:命名关键字参数必须是key=value的形式传值