zoukankan      html  css  js  c++  java
  • 学习笔记-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')

      

  • 相关阅读:
    eclipse中的Invalid text string (xxx).
    在jsp文件中出现Unknown tag (c:out)
    eclipse 界面复原
    ecilpse 纠错插件
    Multiple annotations found at this line:- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port.
    调用第三方https接口
    调用第三方http接口
    创建带值枚举
    spring整合redis之Redis配置文件
  • 原文地址:https://www.cnblogs.com/Cloudloong/p/9581546.html
Copyright © 2011-2022 走看看