函数作用域小结

1.变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内部作用域

2.只有模块,类,函数才能引入新作用域

3.对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量

4.内部作用域要修改外部作用域的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字,nonlocal是python3新增关键字,有了这个关键字,就能完美的实现闭包了。

时间: 2024-10-24 12:50:06

函数作用域小结的相关文章

JavaScript 函数作用域的“提升”现象

在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的.例如 : message = "hello JavaScript ! " 即定义了一个全局变量message,并赋值 "Hello JavaScript!"--<JavaScript高级程序第三版> 如同往日一般,一群人在所谓的技术交流群里面相互斗图着.突然老王莫名的正经起来,在群里发了一道JavaScript的题目,让大家猜一猜这道题的答案. v

28、python基础学习-函数作用域

1 #!/usr/bin/env python 2 #__author: hlc 3 #date: 2019/6/1 4 5 # if True : 6 # x = 3 7 # print(x) # 3 8 9 # def f() : 10 # x = 3 11 # print(x) # NameError: name 'x' is not defined 12 """ 13 作用域介绍:python中的作用域分四种情况 14 L:local,局部作用域,即函数中定义的变量:

39 py函数作用域递归函数 变量作用域局部函数 使用lambda

第十课:函数作用域 // python 中的嵌套函数 在一个函数中再定义一个函数 # 小结 : # 函数作用域:因为:python是动态语言,定义变量的时候是不需要指定变量类型的,这样的话,我们在使用或者定义变量的时候作用域会分不清 # 如果在函数中定义一个变量,而且变量名和该函数上一级的作用域中的变量名相同 # 那么在该函数使用该变量时,就会使用局部变量 # 如果在函数中使用一个变量,但该变量在函数中并没有定义,那么会到该函数上一层的作用域去寻找该变量,如果还没有找到,会继续到上一层作用域去寻

函数基础小结

函数基础小结 一.定义函数 只检测语法,不执行代码 二.函数定义的三种方式 有参函数 无参函数 空函数 三.调用函数 def f1(): return 123 f = f1() f1()*2 lis = [f1(),2] 四.函数的返回值 return返回返回值,函数遇到return会终止,return可以返回任意数据类型的值,同时也可以返回多个值 函数只有在调用阶段才会接收返回值,默认返回None 五.函数的参数 5.1 形参 接收实参,具有描述意义,没有具体值 5.2 实参 具有具体的值,传

我的读书笔记一函数作用域

函数作用域与全局作用域: var a=123; function f(){ alert(a); var a=1; alert(a); } f(); 很多人(包括我)都会觉得根据作用域来说函数内部可以访问局部变量和全局变量,运行结果应该是第一次弹出123,第二次弹出1;这是错误的. 运行的结果:第一次弹出undefined,第二次弹出1:这是因为上面的代码等价于: var a=123;function f(){ var a; //变量提升声明 alert(a); a=1; alert(a); }

javascript中函数作用域之”提升“

javascript中函数作用域之变量提升 当我们在函数内部用关键字var声明一个变量的时候,此变量的作用域限制在当前函数. 提升:在一个作用域内部,不管一个变量用var声明的位置在哪里,这个变量属于当前整个作用域,并且在当前作用域的任何位置都可以访问它.在javascript中,这种行为/现象称之为"提升",即一个变量在一个作用域的任何位置用var声明,javascript引擎都会把这些用var声明的变量"移动"到当前作用域的开始处. 谈到javascript这种

《你不知道的javascript》一、函数作用域和块作用域

函数中的作用域 所谓函数作用域,就是属于这个函数的全部变量都可以在整个函数的范围内使用及复用. 1 function foo(a) { 2 var b=a; 3 function bar(c){ 4 var c=b*2; 5 console.log(c); 6 } 7 bar(); //4 8 } 9 foo(3); 1 function foo(a) { 2 var b=a; 3 function bar(c){ 4 var c=b*2; 5 console.log(c); 6 } 7 bar

javascript篇-----函数作用域,函数作用域链和声明提前

在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于这类型的编程语言,javascript是没有块级作用域.取而代之的,javascript使用的是块级作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. 在如下的所示的代码中,在不同位置定义了变量 i . j 和 k ,它们都在同一个作用域内——这三个变量在函数体内均是有定义

变量作用域&amp;函数作用域

一. 变量作用域 1)全局变量 在全局环境下声明的变量被视为全局变量. 在没有使用var进行声明的时候,变量就被定义为全局变量.在ES5的严格模式下,如果变量没有使用var来声明是会报错的. 2)局部变量 在函数体内部声明的变量被视为局部变量.其中涉及到js中的函数作用域问题. 二. 函数作用域 因为js中是没有块级作用域的概念,所谓的块级作用域就是指花括号内的的每一段代码都有其自己的作用域,但js中并不是,例如for循环中定义的变量,外界也可以访问:但是js中有函数作用域的概念,即在每一个函数