1. 函数的产生原因:
在之前的学习中,我们也有接触到一些函数 len(),type(),range()等等,这些函数都属于内置函数,我们可以直接调用,可以看出,函数:
a. 它是可以具体完成某个功能的;
b. 我们可以直接调用它,可重复使用
简言之,函数可以提高代码的复用性,也可以减少我们编写重复代码的工作
2. 函数的定义:
函数代码块以 def 开头,后接函数名称和 () : 。
传入参数可放在“()中”
函数最终 return 结束函数,选择性地返回一个值给调用方。没有return就代表返回 None。
语法 :
def 函数名 (参数1,参数2,参数3,…,参数n):
函数体
return 表达式 (此处可省)
如 :
3. 函数的位置参数 : 即函数定义时,“()"中是有参数标识符的,而不是空的,如图所示,
通过截图中代码内容,我们可以看出: 在调用有位置参数的函数时,参数标识符对应的值也需要传
4. 函数的默认参数
函数在定义时,并且位置参数处不为空,相比3中的唯一不同,就是我们会给参数一个默认的值
当调用函数时,如果不传参数,就使用函数的默认值,如果传了参数那么就用所传的参数
5. 位置参数与默认参数
一个函数,有时候不仅有位置参数,也有默认参数,如果这两者都同时存在的时候,我们需要把位置参数放
在默认参数之前,否则会报错 (可见下方截图)
6. 返回值
return [表达式] 可用于退出函数,返回一个表达式 ,在调用函数得时候,就会拿到这个表达式得值,你可以使用这个表达式进行其他处理,return得这个表达式不会打印在控制台上,需要你进行打印操作才会打印
若不带参数值的return语句返回None
(这就好比:
1) 函数中没有return时,就相当于:你在水果摊看到新鲜得大苹果,因为你还没买,你不能拿走这个苹果,你就
只能看,不能吃,你只能看到它明晃晃得展示在你眼前,展示给你但是你又只能看不能吃就相当于这个函数没有
return,只是打印在控制台让你看,但你不能用其中得内容
2) 函数中有return时,就相当于: 你买了苹果,这个时候这个苹果你就可以拿到,你可以将它先存起来,也可以
直接吃,也可以切片吃,当然也可以切块或者削皮后再吃,你可以拿到这个苹果,苹果就相当于函数中return 表
达式值,这个值你拿到之后你可以用来做其他处理)
例题: 算出1+2+3+4+…+100的值:
图1
通过上方截图观察可知:
1) 调用函数时,return的表达式值不会被打印在控制台,要想查看返回值是否正确,可print打印查看;
2)有return的函数在调用后,可以拿来自己用
3) 没有return的函数,调用该函数时,需要打印在控制台的内容,会自动打印
4) 没有return的函数,print(该函数)时,会打印:None(因为是None类型,所以函数内的数据无法拿来
自己用)
7. 动态参数(不定长参数):
动态参数就是函数参数的个数是不确定的,这个时候,函数定义时,参数表示就需要: *参数名
图2
8. 带有关键字的动态参数 :
函数定义:
def 函数名 (**参数名): # 这个参数是字典类型
代码块
ptint(参数名) # 假如这里输出参数,我们可以查看参数是什么
函数名(a=1,b=2) # 函数调用时,需要指明关键字(即:变量名),
控制台打印结果: {“a”:1,“b”:2}
图3
9 . 位置参数、默认参数、动态参数、关键字动态参数的混用
首先,我们需要知道,这几种参数类型同时存在的话,函数定义时,参数的放置位置:
具体可看下方截图:
图4
图5
图6
图7
图8
图9
图10
通过以上函数定义&不同情况下的结果,我们可以看出:
1)调用函数时,位置参数必须传
2)调用函数时,默认参数(可缺省),动态参数,关键字动态参数均可缺省,即,可以不传
3) 图5图6,可以看出,当动态参数在位置参数或者默认参数后,那么调用函数时,传的参数会优先处理位置参数或默认参数
4) 图8得以得知,当存在位置参数或者默认参数时,那么该两类参数前不能有关键字动态参数,否则会报错
5) 图9可知: 存在位置参数或者默认参数时,那么该两类参数前不能有动态参数,否则也会报错,因为这种情况,传的参数都会默认到动态参数,而后边的位置参数或者默认参数未传参自然会报错
6) 图10可知: 动态参数不能放在关键字动态参数之前,会自动语法报错