Python函数基础与函数递归

数学中函数的定义: 一般的 在一个变化过程中, 如果有两个变量 x 和 y 并且 对于 x的每一个确定的值,y都有唯一确定的值与 其对应, 那么我们就把 x 成为 自变量 把y成为 因变量 y是x的函数。自变量x的取值范围叫这个函数的定义域
y = 2*x

python 中函数 是一种逻辑结构化和过程化的一种变成方法
python中函数定义的方法:

1 def test(x):
2     "the function deinitions"
3     x += 1
4     return x


def 定义函数的关键字
test: 函数名
() 内可定义形参
"" 注释 注释是函数不可缺少的一部分****
x += 1 : 泛指代码块或程序处理逻辑
return 定义返回值
调试运行:可以带参数也可不带
函数名()

函数的优点:
  1.代码重用
  2. 保持一致性,易维护
  3. 可扩展性


Python中函数与过程:
过程的定义: 过程就是简单特殊 没有返回值
也就是 没有返回值的函数

函数返回值:
返回值 =0 返回None
返回值 =1 返回 object
返回值 >= 1 返回 tuple

函数参数
1 形参 只有被调用时分配内存单元, 调用结束释放单元
2 实参 在函数调用时 他们必须是确定的值,这些值传给形参 因此要 预先赋值

1 def test(x,y,z):
2     print(x,y,z)

位置 参数 需要一一对应 缺一不行 多一也不行
test(1,2,3)
关键字参数 无需一一对应 缺一不行 多一也不行
test(x=1,z=2,y=3)
位置参数必须在关键字参数左边
test(1,3,y=2) 报错
test(1,3,z=2) True

参数组 (**字典 *列表

如果没有 加* 就代表把整个列表当作一个整体
加*则 遍历后当作 多个参数传递


test(1,y=2,z=3,z=3) 一个参数不能传两个值

1 def test(*args, *kwargs):
2     print(args)
3     print(kwargs)


全局变量 和 局部变量
全局变量 一般在 文件最顶端定义 全局可用 全局变量字母全部大写
局部变量 在子程序中定义 只在子程序内部使用 局部变量 变量名小写

在子程序中定义的 全局变量的关键字 global
如果 函数的内容 无 global关键字 优先读取 局部变量 只能读取全局变量 无法对全局变量重新赋值
如果函数中有global 关键字 变量本质时 全局变量 函数内 可读取可赋值

函数 == 变量????

1 def foo():
2     print('this is foo')
3     bar()
4 def bar():
5     print('this is bar')
6     
7 foo()

先加载完的函数 不会报错

1 def foo():
2     print('this is foo')
3     bar()
4 foo()
5 def bar():
6     print('this is bar')    


但 函数执行时 bar函数 未被加载到 内存中 会报错 所以就 引申出了 函数==变量

函数的递归:
特性:
1必须有一个明确的结束条件
2每次进入更深一层递归时,问题规模相比上次递归都应有减少
3递归效率不高,递归层数过多会导致 栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构 ,每进入一次 函数 调用,栈会加一层栈帧,每当函数返回时,栈较少一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数越多,会导致栈溢出



纵有疾风起,人生不言弃!
原文地址:https://www.cnblogs.com/poetl/p/8315336.html