函数2:局部变量全局变量、向前引用、递归调用第五天 2018.10.17
函数2:
局部变量与全局变量:
全局变量:没缩进,在文件中的任何位置都可以调用
局部变量:在子程序里定义的变量;局部变量和全局变量重名时,子程序执行子程序的局部变量,其他地方执行全局变量
global关键字:
函数内部无global关键字,优先读取局部变量,无只能读取全局变量;对内部元无法重新赋值改变全局变量,对于可变对象,可以进行操作
有global关键字,变量本质上就是那个全局变量,可读取可赋值
nonlocal关键字,和global用法大体相同
不同的是把全局变量拿来修改,只修改后的变量只在该子程序起作用,对全局变量在其他地方的使用不修改
NAME = "杠娘"
def yangjian():
# NAME = "史正文"
global NAME #取到全局变量
NAME = "小东北" #更改全局变量
print('我要搞', NAME) #换位置就报错global
def qupengfei():
NAME = "基"
print('我要搞', NAME)
yangjian() #执行顺序按照下面调用函数名顺序
qupengfei()
向前引用:风湿理论---->函数即变量(个人理解,把整个函数当成一个变量使用,按照Python解释器执行顺序从上到下按缩进执行)
嵌套函数


递归调用:递归--->在执行时间调用该函数本身
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
#汉诺塔
def move(n,a,b,c):
if n==1:
print(a,'->',c)
else:
move(n-1,a,c,b)
print(a,'->',c)
move(n-1,b,a,c)
move(3,'A','B','C')
浙公网安备 33010602011771号