本系列主要学习Python的基本使用和语法知识,后续可能会围绕着AI学习展开。
Python3 (1) Python语言的简介
Python3 (2) Python语法基础
Python3 (3) Python函数
Python3 (4) Python高级特性
函数部分主要有函数的调用、函数的定义、函数的参数(参数部分比较难,相对于java增加了好多新的概念,参数可以各种组合)、函数的递归。
函数的调用
为什么先强调函数的调用呢,因为Python有好多内置函数,可以为我们解决各种问题。举几个例子:
输出结果:
python内置函数的调用中,如果参数不匹配会出现 TypeError 错误:
函数的定义
在Python中,定义一个函数要使用语句,依次写出、、和 ,然后,在缩进块中编写 ,函数的返回值用语句返回,注意python中没有大括号。
输出结果:
在函数中,一旦执行到return时,函数就执行完毕,并将结果返回,如果没有return 函数执行完成后默认 return None , 函数中 return None 可以简写成 return。
自定义的函数,参数类型不会像内置函数抛出 TypeError 异常,可以自定义TypeError 异常,来保证函数的严谨性。
空函数
输出结果:
空函数的定义: 可以通过关键字 pass 来做函数体 意思很明显,直接通过
函数返回值
python 中支持多参数返回,实质上是返回一个tuple!
输出结果:
函数参数
函数的参数定义非常的灵活,支持必选参数、位置参数、默认参数、可变参数、关键字参数等、并且这些参数可以组合使用。
必选参数
输出结果:
参数为必选参数,否则。
位置参数
输出结果:
myPower(x, n)函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数x和n。
默认参数
默认参数相当于java的重载,一个函数传入不同个数的参数,没有传的参数,会有默认参数来代替
输出结果:
注意定义函数时,必选参数在前,默认参数在后
变化大的的默认参数在前,变化小的默认参数在后,符合使用规则
默认参数代替了java 中因为参数个数引起的重载,减少了函数的定义
定义默认参数要牢记一点:默认参数必须指向不变对象!
比如定义一个函数,传入一个默认参数list:
输出结果:
以上就可以看到,如果定义函数时,参数为list: 在多次使用默认参数时 就会出现 重复添加的情况,原因也很简单,我们定义了一个默认参数的值就会创建一个数据对象,函数执行完返回的值会存储在数据对象中,所以再次调用会呈现累加的情况,我们可以给参数定义一个None 特殊的一个空对象(这个对象是不变的),这样就不会造成累加的情况了。
可变参数
可变参数指传入的参数是可变的,不同于默认参数,可变参数可以理解为传入一个list或tuple,具体的使用有两种方式
输出结果:
可以看出可变参数的写法有两种,一种是直接传入一个list,第二种是用 直接将参数传入,list 传入时用 传入。
关键字参数
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。与java中传入一个map 集合类似,如下:
输出结果:
最后传入的是others 的复制版本,others 的变化不会引起函数的变化。
命名关键字参数
命名关键字是与位置参数比较的,位置可以灵活,写法在位置参数前加一个可变参数 或者,命名关键字参数也可以有默认参数,如下:
输出结果:
组合参数
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是他们是有顺序的跟运算符的级别一样。顺序如下:
必选参数
默认参数
可变参数
命名关键字参数
关键字参数
要注意的是不要同时使用太多的组合,否则函数接口的可理解性很差。
输出结果:
不可思议吧,看到这个结果,对照组合参数的级别不难理解。参数到这就介绍完了,只有多实践才能深入理解。
递归函数
递归函数在各种语言中都有,python的递归有啥特点呢?廖雪峰大神专门一节讲解,我们就来看看吧。
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
递归函数的缺点是递归太深的话,因为python没有尾递归优化会导致栈溢出。
输出结果:
领取专属 10元无门槛券
私享最新 技术干货