本文由 伯乐在线 - 淘小米 翻译,Daetalus 校稿。未经许可,禁止转载!
英文出处:freepythontips.wordpress.com。欢迎加入翻译小组

Hi 朋友们。由于我最近都比较忙,所以已经很长一段时间没有写博客了。在这篇文章中我将和大家分享一些真正有用的技巧和窍门,这些技巧和窍门你们之前可能并不知道。所以不浪费时间了,让我们直接来看看这些内容吧:

枚举

之前我们这样操作:

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

现在我们这样操作:

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

enumerate函数还可以接收第二个参数。就像下面这样:

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

字典/集合 解析

你也许知道如何进行列表解析,但是可能不知道字典/集合解析。它们简单易用且高效。就像下面这个例子:

1
2
3
4
5
6
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(校注,这里我添上了版本号)依旧会给我们一个整数。为了规避这个问题,我们需要这样做:

1
result = 1.0/2

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

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

瞧,现在你不需要在数据上附件“.0” 来获得准确答案了。需要注意的是这个窍门只适用于Python 2。在Python 3 中就不需要进行import 操作了,因为它已经默认进行import了。

简单服务器

你是否想要快速方便的共享某个目录下的文件呢?你可以这么做:

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

这样会为启动一个服务器。

对Python表达式求值

我们都知道eval函数,但是我们知道literal_eval函数么?也许很多人都不知道吧。可以用这种操作:

1
2
import ast
my_list = ast.literal_eval(expr)

来代替以下这种操作:

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

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

脚本分析

你可以很容易的通过运行以下代码进行脚本分析:

1
python -m cProfile my_script.py

对象自检

在Python 中你可以通过dir() 函数来检查对象。正如下面这个例子:

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

调试脚本

你可以很方便的通过pdb模块在你的脚本中设置断点。正如下面这个例子:

1
2
import pdb
pdb.set_trace()

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

if 结构简化

如果你需要检查几个数值你可以用以下方法:

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

来替代下面这个方式:

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

字符串/数列 逆序

你可以用以下方法快速逆序排列数列:

1
2
3
4
5
6
7
8
>>> 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()

这总方式也同样适用于字符串的逆序:

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

优美地打印

你可以通过以下方式对字典和数列进行优美地打印:

1
2
from pprint import pprint
pprint(my_dict)

这种方式对于字典打印更加高效。此外,如果你想要漂亮的将文件中的json文档打印出来,你可以用以下这种方式:

1
cat file.json | python -m json.tools

三元运算

三元运算是if-else 语句的快捷操作,也被称为条件运算。这里有几个例子可以供你参考,它们可以让你的代码更加紧凑,更加美观。

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

这就是今天所有的内容。希望你们能喜欢这篇文章,并且从这篇文章能学到一两个技巧供以后使用。我们下篇文章再见吧。更多内容敬请关注我们的Facebook和Twitter!

如果你有任何意见或建议?你可以在下面评论或者给我发邮件,我的邮件地址是yasoob.khld(at)gmail.com

关于作者: 淘小米

计算机科班,热爱编程,苹果低烧友,Android,Linux,Python菜鸟与入门之间徘徊,微博:@淘小米Micky

查看淘小米的更多文章 »

初学者必知的Python中优雅的用法 分类: Python 2015-05-11 15:02 782人阅读 评论(0) 收藏的更多相关文章

  1. C/C++中const的用法 分类: C/C++ 2015-07-05 00:43 85人阅读 评论(0) 收藏

    const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结 ...

  2. C语言中返回字符串函数的四种实现方法 2015-05-17 15:00 23人阅读 评论(0) 收藏

    C语言中返回字符串函数的四种实现方法 分类: UNIX/LINUX C/C++ 2010-12-29 02:54 11954人阅读 评论(1) 收藏 举报 语言func存储 有四种方式: 1.使用堆空 ...

  3. python中使用eval() 和 ast.literal_eval()的区别 分类: Python 2015-05-11 15:21 1216人阅读 评论(0) 收藏

    eval函数在python中做数据类型的转换还是很有用的.它的作用就是把数据还原成它本身或者是能够转化成的数据类型. 那么eval和ast.literal_val()的区别是什么呢? eval在做计算 ...

  4. Python获取当前时间 分类: python 2014-11-08 19:02 132人阅读 评论(0) 收藏

    Python有专门的time模块可以供调用. <span style="font-size:14px;">import time print time.time()&l ...

  5. 认识C++中的临时对象temporary object 分类: C/C++ 2015-05-11 23:20 137人阅读 评论(0) 收藏

    C++中临时对象又称无名对象.临时对象主要出现在如下场景. 1.建立一个没有命名的非堆(non-heap)对象,也就是无名对象时,会产生临时对象. Integer inte= Integer(5); ...

  6. Java获取项目中的路径 分类: Java Game 2014-08-14 10:17 122人阅读 评论(0) 收藏

    在项目中经常需要获取某个文件的路径: 在这里提供一些获取路径的方法.. 1.此种方式获取的路径,是当前类所在的路径: UserDAOTest.class.getResource("UserD ...

  7. C#中的线程(上)-入门 分类: C# 线程 2015-03-09 10:56 53人阅读 评论(0) 收藏

    1.     概述与概念 C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行.一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为"主线 ...

  8. iOS中UITextField 使用全面解析 分类: ios技术 2015-04-10 14:37 153人阅读 评论(0) 收藏

    //初始化textfield并设置位置及大小   UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 13 ...

  9. opnet仿真过程中SEED的概念问题 分类: opnet 2014-11-02 15:25 69人阅读 评论(0) 收藏

    仿真配置中SEED的概念:仿真随机种子,是产生随机数的种子值,反应随机数的状态.只要选定一个种子值,整个随机事件系统就固定了,复杂仿真的随机过程就成了一次实现.目的是测试仿真系统的稳健性,具体来说,针 ...

随机推荐

  1. UVa 12545 Bits Equalizer (贪心)

    题意:给出两个等长的字符串,0可以变成1,?可以变成0和1,可以任意交换s中任意两个字符的位置,问从s变成t至少需要多少次操作. 析:先说我的思路,我看到这应该是贪心,首先,如果先判断s能不能变成t, ...

  2. 20155327 2016-2017-4 《Java程序设计》第6周学习总结

    20155327 2016-2017-4 <Java程序设计>第6周学习总结 教材学习内容总结 理解流与IO 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两 ...

  3. HDU 1166敌兵布阵 2016-09-14 18:58 89人阅读 评论(0) 收藏

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. ubuntu18.04 编译安装 apache php

    1. apache apache 需要依赖几个模块:apr, apr-util, pcre,也分别源码安装. 1.1 编译安装 1.1.1 apr apr-util 下载地址:http://apr.a ...

  5. 利用HttpWebRequest模拟表单提交

    using System; using System.Collections.Specialized; using System.IO; using System.Net; using System. ...

  6. TCP实现一个简易的聊天室 (Unity&&C#完成)

    效果展示 TCP Transmission Control Protocol 传输控制协议 TCP是面向连接的流模式(俗称:网络流).即传输数据之前源端和终端建立可靠的连接,保证数据传输的正确性. 流 ...

  7. 使用Git上传代码到远程仓库

    1.进入文件夹,cd f:/test/ 2.初始化远程仓库,git init 3.添加代码,git add . (注意add后面的点前面有一个空格) 4.提交代码到远程仓库,git commit -m ...

  8. .net core初试 --- 控制台程序

    .net core这个名字对.net程序员来说都不陌生了,但貌似圈子里真正有开发经验的并不多,关键是公司的项目没需求. 今天我就趁着不忙上手玩了玩,搞明白了一些东西,心中也有了十万个为什么.那么现在与 ...

  9. ABP框架入门踩坑-添加实体

    添加实体 ABP踩坑记录-目录 这里我以问答模块为例,记录一下我在创建实体类过程中碰到的一些坑. 审计属性 具体什么是审计属性我这里就不再介绍了,大家可以参考官方文档. 这里我是通过继承定义好的基类来 ...

  10. 【cocos2d-x 仙凡奇缘-网游研发(1) 登录&注册】

    转载请注明出处:http://www.cnblogs.com/zisou/p/xianfan01.html 公司的项目总算告一段落了,年前憋到年后,总算要上线了,所以我也有了时间来搞我自己的游戏项目了 ...