Python3(3)Python 函数

本系列主要学习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没有尾递归优化会导致栈溢出。

输出结果:

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180118A0S4UD00?refer=cp_1026

扫码关注云+社区