美文网首页python学习
python 里面for代码块不是域!

python 里面for代码块不是域!

作者: ChronosAeon | 来源:发表于2018-03-15 22:01 被阅读0次

  笔者虽然在写python的时候已经被提醒过这个点了,但是在写python的时候还是顺其自然的把强语言类型的东西带了进来,自然而然就把for in代码块当成了域,我们先看这个代码:

if __name__ == '__main__':

    for i in range(10):

        x = 0

    print(x)

如果你有c#或者其他一些语言的反应,第一反应,肯定是稳稳的报错,x明明是for的局部变量,怎么可能在外面得到!

然而世界就这么离奇,你运行一下就知道多么神奇,结果如下:

结果是0!!!!!为什么会拿到值,这个让我代码出bug,让我debug了很久的罪魁祸首!

让我们看一看文档压压惊

python2 解释如下:

The for-loop makes assignments to the variable(s) in the target list.

This overwrites all previous assignments to those variablees including those made in the suite of the for-loop.

...

The target list is not deleted when the loop is finished.

But if the sequence is empty, they will not have been assigned to at all the loop.

for 后面跟着的变量(target list)在循环结束后是不会被删除的,

但如果 for 循环的序列为空,这些变量是完全不会被赋值的。

这在Python中是个大坑啊。

避免这个坑的解决办法就是规范命名规范。

比如用于循环的变量尽量使用单字符。在任何有疑议的情况可以直接将索引值初始化。

很不幸,Python 3中这点没有改变。

相关文章

  • python 里面for代码块不是域!

    笔者虽然在写python的时候已经被提醒过这个点了,但是在写python的时候还是顺其自然的把强语言类型的东西带...

  • C语言——链接属性,变量作用域、存储类型

    作用域 代码块作用域 在代码块({}内)所定义的变量只有在该代码块里面的代码被访问,具有代码块作用域,如果与外层的...

  • ECMAScript6 新增语法

    let 作用域在代码块 用在for循环里面 在作用域内变量重名报错 没有变量提升 死区 函数

  • ES6新增的方法有哪些

    (1)let 区别1: let定义的变量只能在代码块{}里面使用,形成一个{}块级作用域 var作用于函数作用域 ...

  • python基础特性

    python基础特性 全局变量和局部变量 变量的作用域为变量定义所在的代码块(函数),若要在代码块内使用外部的变量...

  • C语言基础掌握之day5

    内存管理 作用域 一个C语言变量的作用域可以是代码块作用域,函数作用域或者文件作用域。代码块是{}之间的一段代码。...

  • 作用域、二义性和extern

    一个C语言变量的作用域可以是代码块 作用域,函数作用域或者文件作用域。代码块是{}之间的一段代码。 总结

  • let和const

    let 在ES5中,函数如果在块级代码里面声明,作用域也是在函数范围内,但在ES6中函数如果在块级作用域里面声明,...

  • 【C语言】内存管理-008

    第八章 内存管理 8.1 作用域 C语言变量的作用域分为: 代码块作用域(代码块是{}之间的一段代码) 函数作用域...

  • js高级知识点(第五天)

    所用域 什么是作用域 变量起作用的范围 什么是块级作用域,使用代码块限定的作用域是块级作用域(let声明的变量是块...

网友评论

    本文标题:python 里面for代码块不是域!

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