一.局部变量和全局变量
函数内部:局部变量优先全局变量
局部变量仅限于函数内部使用
通常:全局变量变量名大写
局部变量变量名小写
1.global关键字 在函数内部只能读全局变量,利用global进行修改
name='fjy'
def change_name():
global name
name='bcs'
print(name)
##打印结果 fjy
错误用法:global在变量名后面
name = ["雪花","寒冰"]
def snow():
name = "雾霾"
global name
print('冬天有', name)
snow() #直接报错
2.函数内部优先读取局部变量
name = ["雪","寒冰"]
def snow():
global name
name = "雾霾"
print("冬天下",name)
name='温暖'
print('冬天有', name)
snow()
打印结果:
冬天下 雾霾
冬天有 温暖
3.对于可变类型,利用global可以对内部元素进行操作
name = ["雪","寒冰"]
def snow():
global name
name[0] = "雾霾"
print("冬天下",name)
name='温暖'
print('冬天有', name)
snow()
打印结果:
冬天下 ['雾霾', '寒冰']
冬天有 温暖
4.关于多重嵌套函数
(1)对于里层函数有global时,优先取值全部变量
在这里global有种如同指针指向内存的方式
name = "艾欧尼亚"
def w():
name = "永不"
def ww():
global name
name ='放弃'
print(name)
ww()
w()
打印结果:
放弃
(2)对于多层函数没有global函数没有定义变量就往上层找
name = "艾欧尼亚"
def w():
name = "永不"
def ww():
print(name)
ww()
w()
打印结果:
永不
5.nonlocal关键字,指定上一级变量可修改,如果没有就继续往上直到找到为止(但不能到全局变量否则报错)
上层有变量:
name = "艾欧尼亚"
def w():
name = "永不"
def ww():
nonlocal name
name='战无不胜'
print(name)
ww()
w()
打印结果:
战无不胜
上层无变量:
name = "艾欧尼亚"
def p():
name='牛逼'
def w():
def ww():
nonlocal name
# name='战无不胜'
print(name)
ww()
w()
p()
打印结果:
牛逼
二.函数即变量理论
函数在未调用时,执行到函数,函数名如同变量名,函数体如同字符串封存在内存中。
调用时在执行。
例如:
正常运行
def qi():
print('祁磊大坏蛋')
li()
def li():
print('历经风是条子')
qi()
运行错误(第二个函数未定义,如同这个变量没有定义)
def qi():
print('祁磊大坏蛋')
li()
qi()
def li():
print('历经风是条子')
三.浅谈递归函数
真正领悟递归的精髓、灵活地运用递归思想来解决问题必须经过长期使用,是一个漫长的过程。
递归特性:
1.必须有一个明确的结束条件
2.每次进入更深一层递归,规模比上一层递归减少
3.递归效率不高,循环越多会导致栈溢出
****递归中每一次return都是返还给上一层递归函数,如果中途没有打印,最终只有一个结果
1 def cla(n): 2 print(n) 3 if int(n/2) == 0: 4 return n 5 return cla(int(n/2)) 6 print(cla(8))
******
8
4
2
1
1
******
cla(8)本身等于1, 8 4 2 1是在执行cla()函数过程中打印出来的
原理图
全面发展