zoukankan      html  css  js  c++  java
  • python的变量作用域问题

    偶然掉进了一个坑里。仔细分析了下原因。原来是变量作用域的问题。简单抽象如下:

    id=1
    #许多行代码
    [id for id in range(10)]
    #许多行代码
    
    if id!=1:
        #做一些事情
        pass
    else:
        #做另外一些事情
    

    结果由于id在

    [id for id in range(10)]
    

      中受到了影响发生了变化,导致虫虫的产生。

    索性探索了下变量作用域,结论如下:

    1. 函数中的同名变量不会影响函数外的同名变量(若未加任何修饰--比如global)

    id=1
    def test():
        id=2
    
    print id
    #===1
    

    2. 变量的最小作用域是一个函数。在函数内部,变量的作用是从始至终的。(这不同于其他语言)

    id = 1
    if True:
        id=2
    
    print id
    #===2
    
    id = 1
    for i in range(10):
        id=i
    print i
    #====9
    

    同样下面的也是ok的:

    if True:
        b=1
    print b
    

    输出1,不会因为b在if/for/while下面而成为一个局部的临时代码块变量!

    变量的最小作用范围是函数,甚至极端点,下面的也是输出1的:

    for i in range(10):
        for j in range(2):
            if True:
                if True:
                    if True:
                        c=1
    
    print c
    

      

  • 相关阅读:
    qt5--数据类型转换
    qt5-QWidget坐标系统和大小和展示区域
    qt5---布局
    qt5-信号和槽
    tomcat中文请求乱码问题
    centos安装ab测试工具
    golang学习之go简单博客应用
    nodejs的jsonrpc调用
    centos下mongodb安装
    使用connect-multiparty限制nodejs图片上传
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/4187539.html
Copyright © 2011-2022 走看看