zoukankan      html  css  js  c++  java
  • 流畅的python 读书笔记 第二章 序列构成的数组 列表推导

     

    列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列。如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会。

    2.2.1 列表推导和可读性

    把一个字符串变成 Unicode 码位的列表

    第一种方法

    symbols = '$¢£¥€¤'
    
    codes = []
    
    # ord() ascii字符串 转换成对应的数字
    for symbol in symbols:
        codes.append(ord(symbol))
    
    print(codes)
    
    # [36, 162, 163, 165, 8364, 164]

    把字符串变成 Unicode 码位的另外一种写法

    symbols = '$¢£¥€¤'
    
    codes = [ord(symbol) for symbol in symbols]
    
    print(codes)
    
    # [36, 162, 163, 165, 8364, 164]

    另一方面,列表推导也可能被滥用。以前看到过有的 Python 代码用列表推导来重复获取一个函数的副作用。

    通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短。

    如果列表推导的代码超过了两行,你可能就要考虑是不是得用 for 循环重写了

    列表推导不会再有变量泄漏的问题

    Python 2.x 中,在列表推导中 for 关键词之后的赋值操作可能会影响列表推导上下文中的同名变量

    '''
    Python 2.x 中,在列表推导中 for 关键词之后的赋值操作可能会影响列表推导上下文中的同名变量。像下面这个 Python 2.6.6 控制台对话:
    
    '''
    
    # python2.6.6 代码
    x = 'my precious'
    dummy = [x for x in 'ABC']
    print x
    
    # C

    x 原本的值被取代了,但是这种情况在python3中是不会出现的.

    列表推导、生成器表达式,以及同它们很相似的集合(set)推导和字典(dict)推导,

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

    python3 代码

    '''
    列表推导、生成器表达式,以及同它们很相似的集合(set)推导和字典(dict)推导,
    在 Python 3 中都有了自己的局部作用域,就像函数似的。
    表达式内部的变量和赋值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们。
    
    '''
    
    
    # python3.6 代码
    x = 'ABC'
    dump = [ord(x) for x in x if x]
    
    print(x)
    # ABC
    
    print(dump)
    # [65, 66, 67]

    ➊ x 的值被保留了。

    ➋ 列表推导也创建了正确的列表

    列表推导可以帮助我们把一个序列或是其他可迭代类型中的元素过滤或是加工,然后再新建一个列表

    列表推导的作用只有一个:生成列表

  • 相关阅读:
    详解Winform多线程编程基本原理
    asp.net 文件夹和文件的创建、删除
    sql server 查询表名,存储过程,列名等
    随机输出数组中的一个数
    C# 获取Access数据库中所有表名及其列名、列类型
    Oracle 数据库小记
    Oracle11g、PLSQL、Winfrom环境搭建
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    Android开发中用到的框架、库介绍
    Android数据存储
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/9430649.html
Copyright © 2011-2022 走看看