• 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 中都有了自己的局部作用域,就像函数似的。表达式内部的变量和赋
    值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们。

    积一时之跬步,臻千里之遥程
  • 相关阅读:
    老大叔开博感想
    模板
    Codeforces Round #685 (Div. 2) 题解
    CF830E Perpetual Motion Machine 题解
    THUWC2020游记
    数论
    后缀数组学习笔记
    Codeforces Round #466 (Div. 2)
    博客停写,搬家到www.54kaikai.com
    lda 主题模型--TOPIC MODEL--Gibbslda++结果分析
  • 原文地址:https://www.cnblogs.com/wangbaojun/p/10611024.html
Copyright © 2020-2023  润新知