美文网首页
python---基本知识20之递归函数&函数作用域

python---基本知识20之递归函数&函数作用域

作者: hello_我的哥 | 来源:发表于2018-01-27 12:22 被阅读47次

递归函数其实不是编程里面所定义的函数,而是数学里面的递归,传递的是一种规律,所以叫递归函数;

我们写递归函数,其实就是三点:第一肯定是一个有规律的运算,所以才会不停的调用同一个函数,第二是有一个传递的过程,从最后一直往前推,并且一直在调用函数自己,第三是有一个回归的过程,在最后得到值得时候,就会告诉前面的一个,又不停的往回传递,最后得出结果:

举例:求N得阶乘:

def factorial(n):

#最后1的阶乘肯定是1是我们知道的值,所以就往回传递

    if n==1:

    return 1

#我们不知道n的阶乘是多少,只知道n的阶乘是n乘n-1的阶乘,所以就往下传递,阶乘的运算规律是一样的,所以不停调用本身

    return n*factorial(n-1) print(factorial(10))

函数的作用域:其实就是指我们定义了一个变量,那这个变量的使用范围是多大;

python里面一般就是四种函数作用域:即LEGB;

L:loca,即在函数内部定义的变量,只在函数内部有用;

E:enclosing,即闭包函数,也就是外函数定义的变量,在整个闭包函数内有用;

G:global,全局命名空间,也就是在整个文件都有效;

B:builtin,内建,就是所有文件,模块都有效,只要是python就有效;

当程序在查找一个变量的时候,遵循的是从小到大原则,即先小范围,在大范围,即LEGB查找;

需要注意一点是,python没有块级作用域,这点和java有区别,java的话,是有块级作用域的;块级作用域的意思就是在代码块中,比如if while等语句的代码块;python是不分块级作用域的;

局部变量:指的就是函数内部的变量,可以用locals得到所有的局部变量,注意locas必须执行在局部函数体里面;另外之前也讲过一个地方,就是闭包的时候,有个关键字nonlocal,表明这个变量属于闭包函数区间,即E;

全局变量:指的是在函数外部,文件最外层定义的变量,可以用globals得到所有的全局变量,然后如果函数体内部的一个变量也想让他区间变成全局变量,则加一个关键字:global就会表面这个变量属于global区间;

相关文章

  • python---基本知识20之递归函数&函数作用域

    递归函数其实不是编程里面所定义的函数,而是数学里面的递归,传递的是一种规律,所以叫递归函数; 我们写递归函数,其实...

  • python基础-08-内置函数、作用域、闭包、递归

    python基础-内置函数、作用域、闭包、递归 1.常见的内置函数 2.函数内变量的作用域 3.内嵌函数和闭包 4...

  • Python之函数

    课程大纲 函数定义 函数的参数 函数的返回值 高阶函数 函数作用域 递归函数 匿名函数 内置函数 函数式编程 将函...

  • python3 函数和lambda

    def 定义函数 写函数文档 递归函数 带参数函数 指定默认值 :如果传list,要加 传递字典** 函数作用域 ...

  • 执行上下文、作用域链、this、闭包

    javascript 执行的是词法作用域,即静态作用域。与之相对的是动态作用域。 静态作用域:函数的作用域在函数定...

  • JavaScript 作用域和闭包理解

    作用域: 分为函数作用域,和块级作用域; 函数作用域 函数作用域外面的无法访问函数作用域内部的变量和函数,这样就可...

  • day9 函数

      今天主要学习匿名函数、变量的作用域、递归函数、模块等内容。   1、匿名函数的声明   格式为:函数名= la...

  • Python 之路03 - Python基础3

    本节内容 函数与函数式编程 函数式编程之参数详解 局部变量与全局变量作用域嵌套函数 递归 函数式编程介绍 高阶函数...

  • JavaScript学习笔记(四)——函数表达式

    匿名函数 作用:模仿块级作用域 递归 严格模式下使用命名函数 闭包 闭包是指有权访问另一个函数作用域中的变量的函数...

  • 详解Kotlin中的作用域函数

    Kotlin作用域函数 作用域函数,Kotlin在语法层面支持拓展函数,作用域函数,作用域函数是指对数据做一些变换...

网友评论

      本文标题:python---基本知识20之递归函数&函数作用域

      本文链接:https://www.haomeiwen.com/subject/xeqnaxtx.html