数学中函数的定义: 一般的 在一个变化过程中, 如果有两个变量 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)这种数据结构 ,每进入一次 函数 调用,栈会加一层栈帧,每当函数返回时,栈较少一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数越多,会导致栈溢出