python 函数递归一次增加一次变量_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结果,但是原函数中并没有打印这段话

最后这个问路还真的是很牛逼,看了好几遍,自己才能不看原稿,按照自己的理解写出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值