• 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结果,但是原函数中并没有打印这段话

    最后这个问路还真的是很牛逼,看了好几遍,自己才能不看原稿,按照自己的理解写出来。
  • 相关阅读:
    Quartz_理解2
    Quartz_理解1
    Java监控常用工具 .
    DB2函数大全
    cvs上传复制项目
    PLSQL DEVELOPER 使用的一些技巧【转】
    webservice_模拟报文测试
    Myeclipse插件将wsdl生成java客户端代码
    利用 UltraEdit 重新排版 XML 结构数据
    uoj164. 【清华集训2015】V 统计
  • 原文地址:https://www.cnblogs.com/xiaoyaotx/p/12386852.html
Copyright © 2020-2023  润新知