Python的隐藏功能

Python编程语言的鲜为人知的但有用的功能是什么?

  • 尝试限制Python核心的答案。
  • 每个答案一个功能。
  • 给出一个示例和功能的简短描述,而不仅仅是文档的链接。
  • 作为第一行使用标题标记该功能。
  • 快速链接到答案:

  • 参数拆包
  • 背带
  • 链接比较运算符
  • 装饰
  • 默认参数陷阱/可变默认参数的危险
  • 字典默认.get
  • 文档字符串测试
  • 省略切片语法
  • 列举
  • 对于/其他
  • 函数作为iter()参数
  • 生成器表达式
  • import this
  • 就地价值交换
  • 列出步进
  • __missing__
  • 多行正则表达式
  • 命名的字符串格式
  • 嵌套列表/发生器理解
  • 运行时的新类型
  • .pth文件
  • ROT13编码
  • 正则表达式调试
  • 发送给发电机
  • 交互式解释器中的选项卡完成
  • 三元表达
  • try/except/else
  • 解包+ print()功能
  • with声明

  • 链接比较操作符:

    >>> x = 5
    >>> 1 < x < 10
    True
    >>> 10 < x < 20 
    False
    >>> x < 10 < x*10 < 100
    True
    >>> 10 > x <= 9
    True
    >>> 5 == x > 4
    True
    

    如果你认为它正在做1 < x ,它出现为True ,然后比较True < 10 ,这也是True ,那么不,那真的不会发生什么(见最后一个例子)。它真的转化为1 < x and x < 10 ,并且x < 10 and 10 < x * 10 and x*10 < 100 ,但是键入较少并且每个术语仅评估一次。


    获取python正则表达式分析树来调试你的正则表达式。

    正则表达式是python的一大特性,但调试它们可能是一件痛苦的事情,而且正则表达式很容易让错误的正则表达式出错。

    幸运的是,python可以通过将未记录的实验性隐藏标志re.DEBUG (实际上是128)传递给re.compile来打印正则表达式分析树。

    >>> re.compile("^[font(?:=(?P<size>[-+][0-9]{1,2}))?](.*?)[/font]",
        re.DEBUG)
    at at_beginning
    literal 91
    literal 102
    literal 111
    literal 110
    literal 116
    max_repeat 0 1
      subpattern None
        literal 61
        subpattern 1
          in
            literal 45
            literal 43
          max_repeat 1 2
            in
              range (48, 57)
    literal 93
    subpattern 2
      min_repeat 0 65535
        any None
    in
      literal 47
      literal 102
      literal 111
      literal 110
      literal 116
    

    一旦你理解了语法,你就可以发现你的错误。 在那里,我们可以看到,我忘了逃脱[][/font]

    当然,你可以将它与任何你想要的标志结合起来,比如评论正则表达式:

    >>> re.compile("""
     ^              # start of a line
     [font         # the font tag
     (?:=(?P<size>  # optional [font=+size]
     [-+][0-9]{1,2} # size specification
     ))?
     ]             # end of tag
     (.*?)          # text between the tags
     [/font]      # end of the tag
     """, re.DEBUG|re.VERBOSE|re.DOTALL)
    

    枚举

    用enumerate包装一个迭代器,它将产生该项目及其索引。

    例如:

    
    >>> a = ['a', 'b', 'c', 'd', 'e']
    >>> for index, item in enumerate(a): print index, item
    ...
    0 a
    1 b
    2 c
    3 d
    4 e
    >>>
    

    参考文献:

  • Python教程循环技术
  • Python文档内置函数 - enumerate
  • PEP 279
  • 链接地址: http://www.djcxy.com/p/1137.html

    上一篇: Hidden features of Python

    下一篇: Replacements for switch statement in Python?