zoukankan      html  css  js  c++  java
  • 【5】python核心编程 第八章-条件和循环

    1、=== range() 的完整语法===

     1 Python 提供了两种不同的方法来调用 range() . 完整语法要求提供两个或三个整数参数:
     2 range(start, end, step =1)
     3 range() 会返回一个包含所有 k 的列表, 这里 start <= k < end , 从 start 到 end , k 每
     4  5 递增 step . step 不可以为零,否则将发生错误.
     6 >>> range(2, 19, 3)
     7 [2, 5, 8, 11, 14, 17]
     8 如果只给定两个参数,而省略 step, step 就使用默认值 1 .
     9 >>> range(3, 7)
    10 [3, 4, 5, 6]

    2、xrange() 内建函数

    1 xrange() 类似 range() , 不过当你有一个很大的范围列表时, xrange() 可能更为适合, 因为
    2 它不会在内存里创建列表的完整拷贝. 它只被用在 for 循环中, 在 for 循环外使用它没有意义。
    3 同样地, 你可以想到, 它的性能远高出 range(), 因为它不生成整个列表。在 Python 的将来版本
    4 中, range() 可能会像 xrange() 一样, 返回一个可迭代对象(不是列表也不是一个迭代器)

    3、for else: 只要for 循环是正常结束的(不是通过 break ), else 子句就会执行

    4、可变对象和迭代器

     1 记住,在迭代可变对象的时候修改它们并不是个好主意. 这在迭代器出现之前就是一个问题.
     2 一个流行的例子就是循环列表的时候删除满足(或不满足)特定条件的项:
     3 for eachURL in allURLs:
     4   if not eachURL.startswith('http://'):
     5     allURLs.remove(eachURL) # YIKES!!
     6 除列表外的其他序列都是不可变的, 所以危险就发生在这里. 一个序列的迭代器只是记录你
     7 当前到达第多少个元素, 所以如果你在迭代时改变了元素, 更新会立即反映到你所迭代的条目上.
     8 在迭代字典的 key 时, 你绝对不能改变这个字典. 使用字典的 keys() 方法是可以的, 因为
     9 keys() 返回一个独立于字典的列表. 而迭代器是与实际对象绑定在一起的, 它将不会继续执行下
    10 去:
    11 >>> myDict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    12 >>> for eachKey in myDict:
    13 ...   print eachKey, myDict[eachKey]
    14 ...   del myDict[eachKey]
    15 ... a 1
    16 Traceback (most recent call last):
    17 File "", line 1, in ?
    18 RuntimeError: dictionary changed size during iteration

    5、生成器表达式

    1 列表解析:
    2 [expr for iter_var in iterable if cond_expr]
    3 生成器表达式:
    4 (expr for iter_var in iterable if cond_expr)
  • 相关阅读:
    设计模式之工厂模式大后期
    Net基础恶补
    TPL异步并行编程之回调
    Net线程安全集合
    【记录贴】树的深度最优路径分析 [ 未完全版 ] 【原】
    java生产环境增量发版陷阱【原】
    expdp和impdp导入导出用法【转】
    exp和imp导入导出时表空间问题【未完】
    linux xargs【转】
    windows cmd命令 批处理bat 导增量jar包【原】
  • 原文地址:https://www.cnblogs.com/jakeyChen/p/4874592.html
Copyright © 2011-2022 走看看