摘要:起初是群里一个哥们这句话报错。我竟然没看懂代码如下其实这个代码不能很好的反应问题。来看以下两个我一开始没理解这个问题。看到和粗略的理解成不能够在闭包函数中改变上层函数的变量。实际上是,如果一个变量被赋值,那么会认为其为局部变量。
起初是群里一个哥们这句话报错。
后来之前的一个实习生,给出了链接来解释这个问题。 我竟然没看懂....
http://stackoverflow.com/questions/89347...
代码如下:
def foo1(tmp =None): def foo(): if tmp: print tmp else : tmp = None return foo()
其实这个代码不能很好的反应问题。来看以下两个case
def foo1(var1 =None): def foo(): var1 = 1 + 1 print var1 return foo() def foo3(tmp=None): def foo(): c = tmp tmp = 1 + 1 return foo()
我一开始没理解这个问题。看到assign variable 和access variable 粗略的理解成不能够在闭包函数中改变上层函数的变量。但... 根本不是这回事。
实际上是, 如果一个变量被赋值,那么python会认为其为局部变量。局部变量只会在当前函数空间来找到变量(就是foo函数内),所以可以看到,在foo3中,解析器看到tmp = 1+1 就认为 tmp 为局部变量,然后想起来之前好像用过tmp,c= tmp ,发现tmp 在这句之前没有被定义所以报错了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/37853.html
摘要:中文文档中的变量提升,是指在声明变量的代码执行之前,可以进行初始化和使用而不是指在创建词法环境阶段是否会创建对应的标识符。 问题背景 今天在 chrome devtools 中运行以下代码: function fn (name){ if (typeof name === undefined){ console.log(name:, name) let name ...
摘要:结果 Date Get the number of days in a month The 0th day of next month is the last day of the current month. function daysInMonth(year, month) { let date = new Date(year, month + 1, 0); ret...
摘要:一个表示编译器检测到一个无效的引用值。在实际情况中,往往是在获取一个未被赋值的引用时被抛出。任何一个函数上下文都有一个被称为活动对象的变量对象。没有找到的话,就会认为引用名没有基础值并抛出的错误。下没有下的属性仅存在于被启动的情况下。 和其他语言相比,javascript中的对于undefined的理解还是有点让人困惑的。特别是试着理解ReferenceErrors错误(x is no...
摘要:环境问题发现最近刚从换到下搬砖,发现在跑的好好的代码,在下终端老是报错还是编码错误注册失败坦白说,看到这个错误好无奈。既然能在跑,换到就出错,那多半是环境问题了,然后我就开始了我的调试追踪之旅了跟踪调试先前调试都是一晃而过,只看结果。 环境:mac 10.12 python3 django 1.10 问题发现 最近刚从arch 换到 mac下搬砖, 发现在arch跑的好好的代码,...
阅读 3568·2021-11-18 13:20
阅读 2726·2021-10-15 09:40
阅读 1739·2021-10-11 10:58
阅读 2106·2021-09-27 13:36
阅读 2585·2021-09-07 10:06
阅读 1847·2021-08-11 11:21
阅读 1424·2019-08-29 17:04
阅读 2079·2019-08-29 14:06