zoukankan      html  css  js  c++  java
  • python2和python3中列表推导式的变量泄露问题

    Python 2.x 中,在列表推导中 for 关键词之后的赋值操作可能会影响列表推导上下文中的同名变量。像下面这个 Python 2.7 控制台对话:

       

    Python 2.7.15 (default, May  1 2018, 05:55:50) 
    [GCC 7.3.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> i = 888
    >>> i
    888
    >>> list1 = [i for i in range(10)]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> i
    9

    如你所见,i 原本的值被取代了,但是这种情况在 Python 3 中是不会出现的:

    Python 3.6.5 (default, May 11 2018, 13:30:17) 
    [GCC 7.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> i = 888
    >>> i
    888
    >>> list1 = [i for i in range(10)]
    >>> list1
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> i
    888

    列表推导、生成器表达式,以及同它们很相似的集合(set)推导和字典(dict)推导,在 Python 3 中都有了自己的局部作用域,就像函数似的。表达式内部的变量和赋
    值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们。

    积一时之跬步,臻千里之遥程
  • 相关阅读:
    boost开发指南
    boost bind function用法说明
    boost库 bind/function的使用
    OpenCV——PS滤镜, 碎片特效
    pthread_join()
    基于用例点来度量软件规模并管理进度 之中的一个
    tomcat的JK和JK2
    rackup工具
    ORACLE EXP命令
    很好的理解遗传算法的样例
  • 原文地址:https://www.cnblogs.com/wangbaojun/p/10611024.html
Copyright © 2011-2022 走看看