• 学习笔记-Python基础5-函数作用域


    变量的作用域:

      变量有作用范围限制,其中按作用域分类:全局global(函数外部定义)、局部local(函数内部定义)

      LEGB原则:L指Local局部作用域、E指Enclosing function local外部嵌套函数作用域、G指Global module函数定义所在的模块作用域、B指Buildin,Python内置模块的作用域

      提升局部变量为全局变量:使用global关键字(如果是在函数内修改函数外全局变量也需要在函数内使用global先声明使用的外部全局变量),举例如下:

       

      globals、locals函数分别显示出所有全局变量和局部变量,举例如下:

       

      eval(string_code, globals=None, locals=None)函数:把一个字符串当成表达式来执行,返回表达式执行后的结果,举例如下:

        

      exec(string_code, globals=None, locals=None)函数:把一个字符串当成表达式来执行,没有返回值,举例如下:

        

      递归:直接或者间接调用自身的函数。如解决经典的汉诺塔算法,优点简洁容易理解,缺点消耗资源大,其中Python语言对递归深度做了限制,超过限制会报错,注意写递归函数,一定要有结束条件,举例如下:

        1、斐波那契数列:一列数字,第一个数字是1,第二个数字也是1,之后出现的数字是它前两个数字之和,数学公式为:f(1) = 1,f(2) = 1,f(n) = f(n-1)+f(n-2),实际出现的数字是:1,1,2,3,5,...,举例如下:

          

        2、汉诺塔  

    def move(n, a, b, c):
        '''
        汉诺塔玩法:在三根柱子之间一次只能移动一个圆盘,且大圆盘不能放到小圆盘上
        n:表示有几个盘子
        a、b、c:分别表示三根大柱子
            假定现在将所有圆盘从a移到c
            如果a只有一个圆盘,可以直接移动到c;
            如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。
        '''
        if n == 1:
            print(a,"->",c)
        else:
            move(n-1,a,c,b)# n=2,执行n-1后,move(n-1,a,c,b)->move(1,a,c,b),跳到if处,执行print:A-->B
         move(1,a,b,c)# 这里的a和c是指定义的函数的参数a和c,打印结果是:A-->c
         move(n-1,b,a,c)# n=1 ,执行n-1后,跳到if处,执行print,此时,a=b,c=c,结果是:B-->C
    move(2,'A','B','C')

      

  • 相关阅读:
    破解Excel写密码保护方法
    【收藏推荐】JavaScript 秘密花园
    Flask框架第六篇.Flask中的蓝图和特殊装饰器
    Flask框架第四篇.Flask 中的 请求Request和session
    Flask框架第三篇.Flask 中的 Response
    Flask框架第八篇.请求上下文
    Flask框架第一篇.Flask框架基础
    Flask框架第二篇.Flask中的配置
    Flask框架第五篇.Flask 中的路由
    Flask框架第七篇.CBV和Flasksession
  • 原文地址:https://www.cnblogs.com/Cloudloong/p/9581546.html
Copyright © 2020-2023  润新知