函数分为有返回值和无返回值两种。不定义返回值的函数又叫过程,默认返回None。

函数参数

1.位置参数必须在关键字参数的左边
2.位置参数必须一一对应,缺一不行,多一也不行
3.关键字参数无须一一对应,缺一不行,多一也不行
4.test(1, y=2, z=3, z=3)#报错,一个参数不能传两个值
5.*arg:只能解决位置参数,传入的是列表形式
6.**kwargs:可以解决关键字参数,传入的是字典形式

全局变量局部变量

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

当有同名变量时,可以用关键字,使用相对于本作用域外的外部变量:global(指代全局变量),nonlocal(指代上一级变量)

函数即变量

调用

作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变

递归调用:

在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身

递归调用特性:

1.必须有个明显的结束条件

2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

def test():
  print('in the test')
print(test)  #打印函数地址
print(test())  #打印执行函数的运行结果

 函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系