zoukankan      html  css  js  c++  java
  • <转> Python的优雅技巧

    枚举

    不要这么做:

    i = 0 
    for item in iterable: 
        print i, item 
        i += 1
    

    而是这样:

    for i, item in enumerate(iterable):
        print i, item
    

    Enumerate可以接受第二个参数,例如:

    >>> list(enumerate('abc')) 
    [(0, 'a'), (1, 'b'), (2, 'c')] 
    
    >>> list(enumerate('abc', 1)) 
    [(1, 'a'), (2, 'b'), (3, 'c')]
    

    字典/集合 解析

    你可能知道列表解析,但不知道字典/集合解析。字典/集合解析简单而且高效,例如:

    my_dict = {i: i * i for i in xrange(100)} 
    my_set = {i * 15 for i in xrange(100)}
    # There is only a difference of ':' in both
    

    强制浮点数除法

    如果我们除以一个整数,即使结果是一个浮点数,Python(2) 依旧会给我们一个整数。为了规避这个问题,我们需要这样做:

    result = 1.0/2
    

    但是现在有一种别的方法可以解决这个问题,甚至在之前我都没有意识到有这种方法存在。你可以进行如下操作:

    from __future__ import division 
    result = 1/2
    # print(result)
    # 0.5
    

    需要注意的是这个窍门只适用于Python 2。在Python 3 中就不需要进行import 操作了,因为它已经默认进行import了。

    简单的服务器

    你想快速简单的分享目录下的文件吗?可以这样做:

    # Python2
    python -m SimpleHTTPServer
    
    # Python 3
    python3 -m http.server
    

    这回启动一个服务器

    Python表达式求值

    我们都知道eval,但也许并不是所有人都知道literal_eval.可以这么做:

    import ast 
    my_list = ast.literal_eval(expr)
    

    而不是这样:

    expr = "[1, 2, 3]" 
    my_list = eval(expr)
    

    我相信对于大多数人来说这种形式是第一次看见,但是实际上这个在Python中已经存在很长时间了。

    分析脚本

    按下面的方式运行脚本,可以很简单的对其进行分析:

    python -m cProfile my_script.py
    

    对象自检

    在Python中,可以通过dir()来检查对象,例如:

    >>> foo = [1, 2, 3, 4]
    >>> dir(foo) 
    ['__add__', '__class__', '__contains__', 
    '__delattr__', '__delitem__', '__delslice__', ... , 
    'extend', 'index', 'insert', 'pop', 'remove', 
    'reverse', 'sort']
    

    调试脚本

    你可以使用pdb模块在脚本中设置断点来调试脚本,就像这样:

    import pdb
    pdb.set_trace()
    

    你可以在脚本的任何地方加入pdb.set_trace(),该函数会在那个位置设置一个断点。超级方便。你应该多阅读pdb 函数的相关内容,因为在它里面还有很多鲜为人知的功能。

    简化if结构

    如果必须检查一些值,可以用

    if n in [1,4,5,6]:
    

    而不是用复杂的if结构:

    if n==1 or n==4 or n==5 or n==6:
    

    字符串/数列 逆序

    下面的方式可以快速反转一个列表:

    >>> a = [1,2,3,4]
    >>> a[::-1]
    [4, 3, 2, 1]
    
    # This creates a new reversed list. 
    # If you want to reverse a list in place you can do:
    
    a.reverse()
    

    这种方式同样适用于字符串:

    >>> foo = "yasoob"
    >>> foo[::-1]
    'boosay'
    

    优雅地打印

    下面的方式可以用优雅的方式打印字典和列表:

    from pprint import pprint 
    pprint(my_dict)
    

    这用于字典打印是非常高效的,如果你想从文件中快速优雅的打印出json,可以这样做:

    cat file.json | python -m json.tools
    

    三元运算

    三元运算是if-else 语句的快捷操作,也被称为条件运算。这里有几个例子可以供你参考:

    [on_true] if [expression] else [on_false]
    x, y = 50, 25
    small = x if x < y else y
    

    译文出处:http://www.ido321.com/1576.html

    本文根据@Nicolas Bevacqua的《nifty-python-tricks》所译,整个译文带有我自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:https://freepythontips.wordpress.com/2015/04/19/nifty-python-tricks/

  • 相关阅读:
    Angular Universal 学习笔记
    SAP Spartacus 如何获得当前渲染页面的 CMS 元数据
    Angular 服务器端渲染的学习笔记(二)
    Angular 服务器端渲染的学习笔记(一)
    第三方外部 Saas提供商如何跟使用 SAP 系统的客户进行对接接口集成
    如何从 SAP Spartacus Product Detail 页面,找到其 Angular 实现 Component 的位置
    具备自动刷新功能的 SAP ABAP ALV 报表
    C++学习目录
    c--条件编译
    c--文件读写--二进制
  • 原文地址:https://www.cnblogs.com/geekpy/p/5131622.html
Copyright © 2011-2022 走看看