作用域

Python开发【第十二篇】python作用域和global nonlocal

会有一股神秘感。 提交于 2019-12-02 05:10:27
python的作用域 作用域也叫名字空间,是访问变量时查找变量名的范围空间 python中的四个作用域 LEGB 作用域 英文解释 英文缩写 局部作用域 Local(function) L 外部嵌套函数作用域 Enclosing Function local E 函数定义所在模块(文件)的作用域 Global(module) G Python内建模块的作用域 Builtin(python) B 示例: # 此示例示意作用域 v = 100 def f1(): v = 200 print("f1.v=", v) def f2(): v = 300 print("f2.v=", v) f2() f1() print("v=", v) 变量名的查找规则 L ---> E ---> G ----> B 注: 在默认的情况下,变量名赋值会创建或改变当前作用域 内变量的绑定关系 global语句 作用: 告诉解释执行器,global语句声明的一个或多个变量 这些变量的作用域为模块级的作用域,也称为全局变量 全局声明(global)将赋值语句的变量映射到模块文件内部的作用域 语法: global 变量名1 global 变量名1,变量名2,.... 示例: # 此示例示意global语句的语法和用法 v = 100 def f1(): global v # global声明v为全局变量 v =

JS基础-作用域

六月ゝ 毕业季﹏ 提交于 2019-12-02 03:54:32
作用域相关问题 下面的代码打印什么内容,为什么? // 情况 1 // 情况 2 var b = 10; var c = function b() { b = 20; console.log(b) } c() // 上面两种都打印: ƒ b() { b = 20; console.log(b) } b函数(函数表达式定义函数)是一个相当于用const定义的常量,内部无法进行重新赋值,如果在严格模式下,会报错"Uncaught TypeError: Assignment to constant variable." 简单改造下面的代码,使之分别打印 10 和 20 var b = 10; (function b() { b = 20; console.log(b) })() 打印10: var b = 10; (function b(b) { window.b = 20; console.log(b) })(b) var b = 10; (function b() { b.b = 20; console.log(b) })() 打印20: var b = 10; (function b(b) { b = 20; console.log(b) })() var b = 10; (function b() { var b = 20; console.log(b) })()

JS基础-函数

冷暖自知 提交于 2019-12-02 03:52:19
函数 JS运行分三步: 语法分析(通篇扫描是否有语法错误),预编译(发生在函数执行的前一刻),解释执行(一行行执行)。 预编译执行分五步: 一、创建AO对象(Activation Object 执行期上下文) 二、找形参和变量声明,将变量和形参名作为AO属性名,值为undefined. 变量声明提升(变量放到后面也不会报错,只是未定义类型)如:console.log(a);var a=10;结果undenfined; 三、将实参值和形参统一(传参) 四、在函数体里面找到函数声明{函数声明整体提升(相当于放到程序最前面)} 五、值赋予函数体,执行(声明函数和变量的部分直接不看了) 函数作用域[[scope]] 每个javascript函数都是一个对象,对象中有的属性可以访问,有的不能,这些属性仅供javascript引擎存取,如[[scope]]。 [[scope]]就是函数的作用域,其中存储了执行期上下文的集合。 执行期上下文 : 当函数执行时,会创建一个称为执行期上下文的内部对象(AO)。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行期上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行期上下文,当函数执行完毕,它所产生的执行上下文被销毁。 作用域链 [[scope]] 中所存储的执行期上下文对象的集合,这个集合呈链式链接

python基础篇(完整版)

北战南征 提交于 2019-12-02 03:49:25
目录 计算机基础之编程和计算机组成 什么是编程语言 什么是编程 为什么要编程 编程语言的分类 机器语言(低级语言) 汇编语言 高级语言 计算机的五大组成 CPU(相当于人类的大脑) 多核CPU(多个大脑,同时(同一时刻)处理多件事情) 应用程序的启动流程 ROM存储器+CMOS存储器 硬盘工作原理 操作系统 什么是文件 什么叫应用程序 什么是操作系统 操作系统的作用 操作系统启动 应用程序和操作系统启动的区别 网络瓶颈效应 变量 什么事变量 变量的组成 变量名的命名规范 变量名的两种定义方式 定义变量的三个特征 常量 python内存管理方式 引用计数 垃圾回收机制 小整数池 执行python的两种方式 交互式 命令行式 花式赋值 注释 数据类型基础 数字类型 整形(int) 浮点型(float) 字符串类型 列表 字典 布尔类型 解压缩 与用户交互 python2中的与用户交互 三种格式化输出 占位符 format格式化 f-string格式化 基本运算符 算术运算符 逻辑运算符 赋值运算符 比较运算符 身份运算符 运算符的优先级(了解) 流程控制之if判断 单分支结构 双分支结构 多分支结构 if判断的嵌套 while循环 while + break while + continue while + else for循环 for + break for + continue

作用域、闭包、原型

試著忘記壹切 提交于 2019-12-02 03:36:32
1.作用域 1) 全局作用域 2)函数作用域 3)块级作用域 // 最顶层作用域即为全局作用域 function test() { if (true) { var a = 1 let b = 2 } console.log('a: ', a); // 在函数里用var声明的变量都是局部变量 console.log('b: ', b); // 使用let声明的变量只在定义的代码块内有效 } test() 总结: 作用域就是js访问变量的机制 2.闭包 在函数外能够访问函数内的变量 1) var a = function outer() { var a = 2 return function () { a ++ return a } } var b = a() b() // 3 b() // 4 2)作用及缺点 作用: 实现私有变量,减少全局变量 缺点: 耗费内存,容易导致内存泄漏 3. 原型 每一个函数都有一个prototype对象属性,指向另一个对象 prototype(对象属性)的所有属性和方法,都会被构造函数的实例继承 prototype就是调用构造函数所创建的那个实例对象的原型(proto)。 function Animal(animal) { this.name = animal } Animal.prototype.getName = function() {

Python 内置函数

て烟熏妆下的殇ゞ 提交于 2019-12-02 02:58:00
内置函数,也就是Python为我们提供的可以直接拿来用的函数,比如,print,input。 作用域相关的函数,globals()和locals(),locals是返回当前作用域中的名字,而globals则是返回全局作用域中的名字。 def func(): a = 10 print(locals()) # 当前作用域中的内容 print(globals()) # 全局作用域中的内容 print("今天内容很简单") func() 结果为: {'a': 10} {'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': <module 'builtins' (built-in)>, '__builtins__': <module 'builtins' (built-in)>, '_ih': ['', 'def func():\n a = 10\n print(locals()) # 当前作用域中的内容\n print(globals()) # 全局作用域中的内容\n print(

tensorflow中使用变量作用域及tf.variable(),tf,getvariable()与tf.variable_scope()的用法

我的未来我决定 提交于 2019-12-02 02:39:45
一 .tf.variable() 在模型中每次调用都会重建变量,使其存储相同变量而消耗内存,如: def repeat_value():   weight=tf.variable(tf.random_normal([5,5,6]),name='weight')   return weight 如果多次调用函数如: result1=repeat_value() result2=repeat_value() # 重复调用 将会重复创建一份变量,却保存相同模型参数。若使用字典可以解决此类问题,却破坏模型封装性(有关字典解决此问题,可留言回复)。 二 . tf.get_variable()与tf.variable_scope()方法可以解决上面问题,其中前者负责创建或获取指定名称的变量,后者负责传入tf.get_variable()方法的变量名称的名字空间。 def a(input,kernel_shape): w=tf.get_variable('w',kernel_shape,initializer=tf.random_normal()) #创建获取名叫w的变量 conv=tf.nn.conv2d(input,w,strides=[1,1,1,1],padding='SAME') return convdef b(img): with tf.variable_scope("conv1"

ES6入门之let和const命令

ぐ巨炮叔叔 提交于 2019-12-01 20:35:05
前言 大家好,我是一只流浪的kk,当你看到这边博客的时候,说明你已经进入了ES6学习的领域了,从本篇博客开始,我将会将自己学习到ES6的相关知识进行整理,方便大家参考和学习,那么我将带你进入第一节的内容学习let和const命令,本篇博客从三个方面进行全方位解析。 let命令 首先我们需要学习的是let命令的使用,这个使用非常简单,它其实也是声明变量的一种方式,和var相比我把它的特点总结了如下四点,一起来看看吧! (1):基本用法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>let命令的基本用法</title> </head> <body> <script type="text/javascript"> let a=10; var b=20; console.log(a);//10 console.log(b);//20 </script> </body> </html> 我们看到我们现在是使用let关键字定义变量的,好处的话我们一步一步进行讲解 (2):不具备变量提升的能力 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>不具备变量提升的能力</title> </head> <body> <script type="text

12JS作用域,作用域链

狂风中的少年 提交于 2019-12-01 20:27:34
##即是代码名字在某个范围内起到的作用和效果(提高程序可靠性,减少命名污染) 有全局和局部;顾名思义了这两个词 %%注意:局部中没有声明直接赋值的也是全局变量 作用域链: var num=10; function fn(){ var num=20; function fun(){ console.log(num); } fun() } fn(); 来源: https://www.cnblogs.com/cai-bai/p/11716869.html

ES6学习之——let和const命令

荒凉一梦 提交于 2019-12-01 16:39:52
let命令 基本用法 ES6新增,用来声明变量,用法类似 var ,所声明的变量,只在 let 命令所在的代码块内有效 { let a = 10; var b = 1; } a // a is not defined b // 1 let和var在for循环中的对比 // var声明 var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10 上面代码中,变量 i 是 var 声明的,在全局范围内都有效,所以全局只有一个变量 i 。每一次循环,变量 i 的值都会发生改变,而循环内被赋给数组 a 的 function 在运行时,会通过闭包读到这同一个变量 i ,导致最后输出的是最后一轮的 i 的值,也就是10。 而如果使用 let ,声明的变量仅在块级作用域内有效,最后输出的是6。 // let声明 var a = []; for (let i = 0; i < 10; i++) { a[i] = function() { console.log(i); }; } a[6](); // 6 上面代码中,变量 i 是 let 声明的,当前的 i 只在本轮循环有效,所以每一次循环的 i 其实都是一个新的变量,所以最后输出的是 6 。你可能会问