总结:
1.函数
2.函数调用
3.函数的参数
一、函数:
什么是函数?
函数是具有某个特定功能的使用工具
为什么要用函数呢?
1.提高开发效率
2.减少代码冗余
3.提高程序的可扩展性
怎样定义一个函数
def 函数名(形参1,形参2,…):
‘’‘
函数的注释:简要说明该函数能够实现的功能
‘’’
函数体代码1
函数体代码2
…
Return x1,x2,x3,x4,…
1.def 是一个关键字,是用来定义一个函数的。
2.函数名就是给这个函数起个名字。起名方式跟变量名起名方式类似。括号里面的可以有0个形参,也可以有多个形参。
3.函数的注释:简要的讲该函数可以实现什么功能
4.函数体代码:可以有多行函数体代码
5.return x 表示整个函数结束后,可以根据自己的需要,返回值x1,x2,x3,…其中的一个值,或多值,也可以返回一个空
函数在定义的时候只检测函数体语法,不检测函数体代码
函数分类:
内置函数:已经封装好的函数,可以直接拿来调用,如:len(),max()
自定义函数:根据自己的需要,自己编写一个封装函数,实现自己想要的功能。
二、函数调用:
函数名(实参1,实参2,实参3,…)
调用函数的固定格式:
1.函数名+()
2.函数名遇到括号会立即执行函数体代码
3.代码中遇到函数体加括号,优先级最高
4.先 执行函数体加括号,等该函数调用结束后,在执行后面的代码
当一个函数名被定义了之后,怎样来调用该函数呢。
2.调用函数后返回值问题
1.让执行到代码函数名加括号时,就会调用之前定义好的函数。执行里面的函数体。当函数结束后,我们需不需让它返回一个结果。如果需要返回一个结果,这时我们就用到return 这个关键字。当该函数调用后,没有return,那么默认该函数结束后返回None
Return 结果
1.这个结果可以是int、float、str、list、dict、元祖、集合、bool
2.这个结果可以是多值,也可以没有。当不给值得话,返回None,同时结束该函数,return后面函数内的代码不会被执行。当一个值得时候,返回的就是该值。当多个值得时候,返回的值由这些多值组成的元祖。
1为什么多个值在一起的时候返回类型时元祖呢? 函数不想将函数调用后的结果被人修改
2.怎么让返回的结果不是元祖呢? 可以将这个多值最外面用 [ ],’’ ‘’ 包起来,变成一个类型的值
三、函数参数的概要
参数类型:形参、实参,
1.将定义函数时,函数名括号内的参数称之为形参,
将调用函数时,函数括号内容参数称之为实参
2.形参:形参可以多个,形参1,形参2,形参3,…,也可以为空
实参:实参可以多个,实参1,实参2,实参3,…,实参也可以为空
形参与实参的关系:
1.形参相当于变量名,实参相当于变量名指向的值
2.函数调用时,形参就会指向对应的实参的值
形参和实参的绑定关系只在函数的调用阶段有效,函数结束运行后自动解除之间的。只在函数内生效,函数外不生效
位置参数:在定义函数阶段按照位置从左往右依次书写的形参,叫做函数位置形参,位置形参在被调用的时候,一定要给其传值
注意:
1.当实参给形参按照位置传值时,必须一一对应,既不能多,也不能少。
2.关键字传值:直接在函数调用时,将以给形参赋值的方式,作为函数调用括号里面的实参(两个参数的位置没有要求)
3.当位置参数与关键字传值一起使用时,位置参数放在函数调用括号里面最左边,不然会出现报错
4.同一个形参不能多次赋值
默认值参数:
在定义函数时,括号内的形参就已经被赋值了
1.在调用函数的时候,可以不为默认值形参传值,默认使用定义函数时,给形参赋的值
2.在调用的时候如果可以给默认值形参传值,那么就使用你传的值
3.在定义函数阶段,默认值形参必须放在位置形参的后面
默认值参数的应用场景
当形参接收的到值比较单一的情况下 通常可以考虑用默认值形参
函数无论在什么地方被调用
都会跑到函数定义阶段去执行代码
形参中用到的值都是往函数定义阶段代码往上找
可变长参数
1.站在调用函数的角度,实参的个数不固定,
2.站在定义函数的角度,形参的个数不固定,
可以用*或**来接受多余的参数和关键字参数
站在形参的角度看 *
当调用时实参的个数,超过形参的个数,形参中的*会将多余的(溢出的)位置实参 统一用元组的形式处理 传递给*后面的形参名
站在实参的角度看 *
当调用时实参的个数,小于形参的个数,实参中的*会将后面的内容打散,一一传入到形参中。列表,元祖,集合,字符串。字典分割的时候,只显示出key值。
站在形参的角度:看**
**会接收所有多余的关键字参数 并将关键字参数 转换成字典的形式 字典的key就是关键字的名字
字典的value就是关键字的名字指向的值 将字典交给**后面的变量名
站在实参的角度:看**
**会将字典拆封成 key = value的形式,在给按关键字来传值
万能输入格式:调用者按照正确传参的方式无论怎么传 你的函数都能够正常执行
Def func(*args,**kwargs))
原文:https://www.cnblogs.com/oldboyliuhong/p/11159620.html