函数的概念
在编程中,我们经常要调用相同或者类似的操作,这些相同或者类似的操作是由同一段代码完成的,而函数的出现,可以帮助我们避免重复编写这些代码。函数的作用就是把相对独立的某个功能抽象出来,使之成为一个独立的实体。
例如:我们开发一个支持人与人之间对话的社交网站,“对话”这个功能实现起来比较复杂,我们可以将它封装为一个函数,每次调用函数就可以发起对话。大型网站都有日志功能,所有重要操作都会记录日志,而日志处理需要多行python文件操作的相关代码组成,将这些代码组成装为函数,每次写日志调用此函数即可。
python在全世界被广泛使用的一个原因,就是python中有大量的内置函数,这些函数可以帮助我们快速构建各种场景的网站,下面开始讲解python函数。
函数的定义
定义一个函数只要以“def”开头即可。
def functions_name (arg1,arg2): function body return value
函数名(functions_name): 和python中其它的标识符命名规则相同,有效的函数名字以字母或下划线开头,后面可以跟字母,数字,下划线,函数名应该能够反映函数所执行的任务。
注意python中的函数名区分大小写,字母相同但是大小写不同的函数视为两个不同的函数。
函数参数(arg1,arg2): 调用一个函数时可以传递的参数。参数可以有一个或者多个,也可以没有参数。
函数内容(function body): 任何有效的代码都可以出现在函数内部。注意函数内容相对于定义函数的 “def”行需要缩进四个空格。
函数返回的值(return value): 函数执行完成后返回的值。也可以不返回任何内容,不返回内容可视为“None”。
def introduce (name): print("Hello",name) introduce("World") # Hello world introduce("电脑网络技术记录本") # Hello 电脑网络技术记录本
执行的结果如下:
Hello World Hello 电脑网络技术记录本
函数命名为 “introduce”,接受1个参数 “name”,没有返回值。一共调用了两次函数,每次都会输出如注释中的文字。
函数参数
在创建函数时,可以设置参数,也可以不设置参数。对于设置参数的函数,当调用函数时需要向函数进行传参,被传入的函数称为实参,而函数定义时的参数为形参。
python中函数的参数可以分成以下几种类型:
1,必须参数。
2,关键字参数。
3,默认参数。
4,可变参数。
5,组合参数。
必须参数:
必须参数,顾名思义就是函数定义的参数调用时必须传入,并且在调用的时候数量和顺序必须和定义函数时的参数保持一致。例如:
def add(a,b): print("a + b =", a+b) add(1,2)
执行结果如下:
a + b = 3
如果我们少传入一个参数:
def two_arg_function(arg1,arg2): print("第一个参数",arg1) print("第二个参数",arg2) two_arg_function(1)
执行结果如下:
TypeError: two_arg_function() missing 1 required positional argument: 'arg2'
这一执行结果告诉我们,调用函数时,函数缺少了一个必要的参数。
如果我们多传入一个参数:
def one_arg_function(arg1): print("第一个参数",arg1) one_arg_function(1,2)
执行结果如下:
TypeError: one_arg_function() takes 1 positional argument but 2 were given
这一执行结果告诉我们,函数只需要一个参数,但是调用时给了两个参数。
用过以上例子我们可以发现,调用函数时必须保证参数的数量与定义函数时的参数数量一致。
关键字参数:
使用关键字参数可以不按函数定义时的参数的顺序来调用函数,python解释器能够根据函数定义时的参数名来匹配参数。例如:
def hello(name,age): print("姓名",name) priny("年龄",age) # 按顺序传递参数。 hello(name="零一",age="18") # 不按顺序传递参数。 hello(age=3,name="小明")
执行结果如下:
姓名 零一 年龄 18 姓名 小明 年龄 3
但是注意不能传入没有定义的参数。
def person_name(name): print("姓名",name) # age 参数未定义 person_name(name="零一",age=18)
执行结果如下:
TypeError: person_name() got an unexpected keyword argument 'age'
这一执行结果告诉我们,代码中有未知的关键字“age”。
通过以上例子,我们可以发现,关键字传参的顺序对结果没有影响,无论是否按照顺序调用都可以得到正常的结果。