函数,function,是一段代码的集合体。是Python为了代码最大程度的重用、减小代码冗余而提供的最基本的程序结构。
Python是一门面向对象的编程语言,对函数进行分类和封装,由对象实现对方法的调用。
一、函数调用
在此之前,我们已经接触过一部分Python的Built-in内建函数,例如abs()、max()、min()、int()等。
要实现调用一个函数,必须先知道函数的名称以及所需要的参数信息。对于内建函数,可以通过命令help(func_name)查看函数的帮助信息。
通过函数名实现调用,其中的函数名其实就是指向一个函数的对象引用,可以把函数名赋给任何一个变量,相当于给这个函数起了一个别名。
例如:
>>> a = abs # a 是函数abs()的别名
>>> a(-1)
1
二、函数定义
- 语法形式
定义关键字def。Python中将函数的声明和定义视为一体,函数由声明的标题行和定义体组成。
def 函数名(参数列表):
函数体
return sth.
【注意】:
- 函数的返回值用return关键字进行返回。若没有显示的使用return,则默认返回None。
- 函数的返回值是一个tuple类型的值。返回一个值时,括号省略;返回多个值时,为同一个tuple接收,把位置赋给相应的值。如果要返回一个list的值,则需要显示地使用“[]”进行修改。
- 前向引用。Python中不允许在函数未声明定义前,对其进行引用或者调用。
【例子一】自定义一个求绝对值的函数为例:
>>> def my_abs(x):
... if x>= 0:
... return x
... else:
... return –x
>>> my_abs(-3)
3
- 定义一个空函数
如何定义一个空函数?使用pass关键字。
pass语句用来作为占位符。
什么时候使用呢?一般是比如说这段代码还没想好怎么写,可以使用pass让代码能运行起来。
def nop():
pass
三、import 调用
函数定义完成后,把函数写入到***.py文件中保存。进入到该存放路径下,启动Python解释器。
使用语句“from py_file_name import 函数名”。
import 语句可以导入需要的Python模块,例如 import time;
也可以从模块中导入某部分,from time import sleep,ctime;
也可以导入某个自定义的模块或者模块中的函数等。
有时候工程模块存在层级目录结构,而只需要导入工程中下的某文件的某部分,则可以使用“.”进行导入,例如:
from 工程名层级.test_function import TestFunc
四、调用函数参数检查
调用函数时,需要对函数的参数列表进行检查。
如果参数个数不对,python解释器会自动检查出来,并抛出TypeError。但如果参数类型不对,python解释器就无法帮助检查。
- 内置函数
内置函数参数类型不对时:
>>> abs('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'
- 自定义函数
若函数定义没有参数检查,则出错信息在下一句,与内置函数不一样,说明函数定义不够完善。
def my_abs(x):
if x>= 0:
return x
else :
return -x
>>> my_abs('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python_project\test1.py", line 2, in my_abs
if x>= 0: (if语句报的错)
TypeError: '>=' not supported between instances of 'str' and 'int'
改为如下:
def my_abs1(x):
if not isinstance(x,(int , float )): # 参数类型检查
raise TypeError('not the type') # 抛出错误并提示“not the type”
if x >=0:
return x
else:
return -x
>>> my_abs1('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python_project\test1.py", line 11, in my_abs1
raise TypeError('not the type')
TypeError: not the type # (错误和异常的处理)