总结: 1.函数 2.函数调用 3.函数的参数

总结:

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.先 执行函数体加括号,等该函数调用结束后,在执行后面的代码

 

当一个函数名被定义了之后,怎样来调用该函数呢。

  1. 当调用一个函数时,该函数必须先被定义,然后才能被调用。如果执行函数调用代码时,前面没有定义该函数,或者在调用代码后面,会出现报错。

 总结: 1.函数 2.函数调用 3.函数的参数

 

2.调用函数后返回值问题

1.让执行到代码函数名加括号时,就会调用之前定义好的函数。执行里面的函数体。当函数结束后,我们需不需让它返回一个结果。如果需要返回一个结果,这时我们就用到return 这个关键字。当该函数调用后,没有return,那么默认该函数结束后返回None

Return 结果

1.这个结果可以是int、float、str、list、dict、元祖、集合、bool

2.这个结果可以是多值,也可以没有。当不给值得话,返回None,同时结束该函数,return后面函数内的代码不会被执行。当一个值得时候,返回的就是该值。当多个值得时候,返回的值由这些多值组成的元祖。

总结: 1.函数 2.函数调用 3.函数的参数

 

1为什么多个值在一起的时候返回类型时元祖呢?    函数不想将函数调用后的结果被人修改

2.怎么让返回的结果不是元祖呢?    可以将这个多值最外面用 [ ],’’ ‘’ 包起来,变成一个类型的值

 

三、函数参数的概要

参数类型:形参、实参,

1.将定义函数时,函数名括号内的参数称之为形参,

将调用函数时,函数括号内容参数称之为实参

2.形参:形参可以多个,形参1,形参2,形参3,…,也可以为空

实参:实参可以多个,实参1,实参2,实参3,…,实参也可以为空

 

形参与实参的关系:

1.形参相当于变量名,实参相当于变量名指向的值

2.函数调用时,形参就会指向对应的实参的值

形参和实参的绑定关系只在函数的调用阶段有效,函数结束运行后自动解除之间的。只在函数内生效,函数外不生效

 

位置参数:在定义函数阶段按照位置从左往右依次书写的形参,叫做函数位置形参,位置形参在被调用的时候,一定要给其传值

 总结: 1.函数 2.函数调用 3.函数的参数

 

注意:

1.当实参给形参按照位置传值时,必须一一对应,既不能多,也不能少。

2.关键字传值:直接在函数调用时,将以给形参赋值的方式,作为函数调用括号里面的实参(两个参数的位置没有要求)

3.当位置参数与关键字传值一起使用时,位置参数放在函数调用括号里面最左边,不然会出现报错

4.同一个形参不能多次赋值

 总结: 1.函数 2.函数调用 3.函数的参数

 

 

 

 

 

 

 

 

 

 

默认值参数:

在定义函数时,括号内的形参就已经被赋值了

1.在调用函数的时候,可以不为默认值形参传值,默认使用定义函数时,给形参赋的值

2.在调用的时候如果可以给默认值形参传值,那么就使用你传的值

3.在定义函数阶段,默认值形参必须放在位置形参的后面

 

默认值参数的应用场景

当形参接收的到值比较单一的情况下 通常可以考虑用默认值形参

 总结: 1.函数 2.函数调用 3.函数的参数

 

 

 

 

 

函数无论在什么地方被调用

都会跑到函数定义阶段去执行代码

形参中用到的值都是往函数定义阶段代码往上找

 总结: 1.函数 2.函数调用 3.函数的参数

 

 

 

 

 

 

 

 

 

可变长参数

1.站在调用函数的角度,实参的个数不固定,

2.站在定义函数的角度,形参的个数不固定,

可以用*或**来接受多余的参数和关键字参数

 

站在形参的角度看 *

当调用时实参的个数,超过形参的个数,形参中的*会将多余的(溢出的)位置实参 统一用元组的形式处理 传递给*后面的形参名

站在实参的角度看 *

当调用时实参的个数,小于形参的个数,实参中的*会将后面的内容打散,一一传入到形参中。列表,元祖,集合,字符串。字典分割的时候,只显示出key值。

 总结: 1.函数 2.函数调用 3.函数的参数

 

站在形参的角度:看**

**会接收所有多余的关键字参数 并将关键字参数 转换成字典的形式 字典的key就是关键字的名字

字典的value就是关键字的名字指向的值  将字典交给**后面的变量名

站在实参的角度:看**

**会将字典拆封成 key = value的形式,在给按关键字来传值

 总结: 1.函数 2.函数调用 3.函数的参数

 

 

万能输入格式:调用者按照正确传参的方式无论怎么传 你的函数都能够正常执行

Def func(*args,**kwargs))

 总结: 1.函数 2.函数调用 3.函数的参数