Python之旅的第七天(局部变量、函数递归)
还是周末好啊,可惜的是早上7点钟就有人叫我,内心是崩溃的。但是今天时间比较充足,看到的内容基本自己的都操作了一遍,更多的都是逻辑问题,理解倒是理解了,还是得看后面自己在运用上能否继续这么容易理解。
# name = 'alex'
#
# def test() :
# global name #决定该函数内的变量name是否会对全局变量name造成影响
# #如果没有global,函数优先读取局部变量,只能读取变量(不可变变量str、int、tuple),无法对变量进行赋值,对于可变对象可以对不元素进行操作
# #有global的时候,则可读取可赋值。
# name = 'join' #如果没有global name,这个name赋值不会对外部name的值造成影响
# print(name)
# return name
#
# test()
# print(name) #没有global name的时候输出'alex',有的时候输出'join'
# #对可变变量(dict、list),局部变量不能修改,但对元素可以增加删除,并增加至name中去
# name = ['alex','alex2']
#
# def test_2():
# global name #此时的运行结果和是否存在global name无关。但如果声明了全局变量,则可以进行重新赋值
# name.append('alex3')
# print(name)
#
# test_2()
# print(name)
# 输出结果均为:
# ['alex', 'alex2', 'alex3']
# ['alex', 'alex2', 'alex3']
#错误示例,下面这样把global放在后面会报错!!!!!!
# name = 'alex'
# def test():
# name = 'join'
# global name
# print(name)
#
# test()
# print(name)
#以上这些问题的解决,通常全局变量使用大写,局部变量使用小写
#以避免混乱
#关于多层嵌套的问题
# 43 NAME = 'alex'
#
# 45 def test_1():
# 46 name = 'test_1被执行了'
# 47 print(name)
# 48 def test_2():
# 49 print('test2被执行了')
# 50 def test_3():
# 51 print('tset_3被执行了')
# 52 test_3()
# 53 test_2()
# 54 test_1()
#多层嵌套时,都是从外向内进行运算的
#43~54行的运行顺序是:43、54、46、47、53、49、52、51最终结束运行
#多层嵌套的内部出现globa,此时应该注意区分局部变量和全局变量
#1、name = 'alex'
#
# def test_1():
#4、 name = 'chenzhuo' #此时赋值的name为在test_1范围内的局部变量
#6、 def test_2():
#7、 global name #内部嵌套出现了global,依然表示为全局变量
#8、 name = 'lengjing' #此处对全局变量name进行了重新赋值
#5、 test_2()
#9、 print(name) #此时输出的name为test_1的局部变量,所以依旧是chenzhuo
#2、print(name)
#3、test_1()
# print(name)
#输出结果为:
# alex
# chenzhuo
# lengjing
#同时此时引入 nonlocal,用于指定上一级变量,区别于global
#关于递归:
# 1、既然是循环引用,就要有一个明确的结束条件
# 2、没进入一次递归,问题的规模就应该减少
# 3、递归随着层数的增加,内存会不断增加,递归效率不高
#问路作为示例
#
# __author__ = 'Linhaifeng'
# import time
#
# person_list=['alex','wupeiqi','yuanhao','linhaifeng']
# def ask_way(person_list):
# print('-'*60)
# if len(person_list) == 0:
# return '没人知道'
# person = person_list.pop(0) #list.pop之前记错了,默认是从左面开始逐个删除的
# print('hi 帅哥[%s],敢问路在何方' %person)
# if person == 'linhaifeng':
# return '%s说:我知道,跟我走吧,我也去那里' %person
# print('%s回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问%s...' %(person,person_list))
# time.sleep(3)
# res=ask_way(person_list) #此处相当于吧ask_way方法的代码块拿到这里运行,必须遇到上面代码块内的return
# # print('%s问的结果是: %res' %(person,res))
# return res
#
#
#
# res=ask_way(person_list)
#
# print(res) #打印函数最终返回的值,即if person =='linhaifeng' return结果,但是原函数中并没有打印这段话
最后这个问路还真的是很牛逼,看了好几遍,自己才能不看原稿,按照自己的理解写出来。