一、函数的定义和调用
把具有某一段功能的代码提取出来, 封装成一个代码块, 在需要的时候进行调用
二、特点
1、去除重复的代码
2、当函数功能发生修改时, 只需要修改函数体即可
(增强程序的拓展性)
三、函数体
实现函数功能的代码
1、函数声明的时候, 不会执行函数体
2、函数调用的时候, 才会执行函数体
3、一个函数体可以被多次执行(一个函数可以被多次调用)
函数名建议:1、不能与python内置的函数名重名
2、不要使用拼音,多个英文单词组成的时候,中间以下划线连接
四、函数的注释: 解释说明程序
1、功能
2、参数(函数的使用方法) 函数名(参数)
3、返回值
在函数体中,输入三对引号,回车,自动生成函数说明文档格式;
查看函数的说明文档 函数名.__doc__
如果该函数没有说明文档, 函数名.__doc__ 返回一个 None
1 def get_sum(a, b): 2 """ 3 求两个数的和 4 :param a: 一个数 5 :param b: 另一个数 6 :return: 两个数的和 7 """ 8 return a + b
1 def get_big_num(a, b): 2 if a > b: 3 return a 4 else: 5 return b 6 7 print(get_big_num.__doc__) # None
五、函数的参数
1、位置参数:postional arguments 默认的参数
实参的个数与形参相同, 实参与形参一一对应;
2、默认值参数: default arguments
定义一个函数的时候,给形参一个默认的值,给默认值参数的形参传值时, 函数会采用实参的值
注意
(1)默认值参数的赋值时机: 函数声明的时候就被赋值了;
程序执行的过程:顺序执行
函数的声明定义语句(默认值参数的赋值)——> 被执行
函数体 ——> 不被执行(调用时才执行)
· (2)如果默认值参数的值是一个可变数据类型对象,那么函数多次调用, 操作的是同一个参数对象
如果不想使用同一个参数变量,可以使用实参进行覆盖
3、可变参数
可变长的参数 ,参数的个数是不确定的,用于接收(0-N)个参数
(1)可变元祖参数: *参数名
传入的实参 *元组: *具有打散序列的功能, 将元组中的每个元素作为可变参数传入
(2)可变字典参数:**参数名
传入实参时: key=value, key=value, 关键字参数形式传入
传入实参时 **字典: **具有打散字典的功能, 将字典中的键值对以关键字参数的形式传入
要求遵守顺序: 位置参数, 可变元组参数, 默认值参数, 可变字典参数
六、递归函数
如果一个函数在内部调用自身,这个函数就是递归函数
使用递归求n的阶乘
1 def get_factorial(n): 2 if n == 2: 3 return 1 * 2 4 else: 5 return get_factorial(n-1) * n 6 7 print(get_factorial(5))