枚举

之前我们这样操作:

 
 
 
 
 

Python

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

现在我们这样操作:

 
 
 
 
 

Python

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

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

 
 
 
 
 

Python

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

字典/集合 解析

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

 
 
 
 
 

Python

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

 
 
 
 
 

Python

 
1
result = 1.0/2

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

 
 
 
 
 

Python

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

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

简单服务器

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

 
 
 
 
 

Python

 
1
2
3
4
5
# Python2
python -m SimpleHTTPServer
 
# Python 3
python3 -m http.server

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

对Python表达式求值

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

 
 
 
 
 

Python

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

来代替以下这种操作:

 
 
 
 
 

Python

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

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

脚本分析

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

 
 
 
 
 

Python

 
1
python -m cProfile my_script.py

对象自检

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

 
 
 
 
 

Python

 
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模块在你的脚本中设置断点。正如下面这个例子:

 
 
 
 
 

Python

 
1
2
import pdb
pdb.set_trace()

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

if 结构简化

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

 
 
 
 
 

Python

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

来替代下面这个方式:

 
 
 
 
 

Python

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

字符串/数列 逆序

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

 
 
 
 
 

Python

 
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()

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

 
 
 
 
 

Python

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

优美地打印

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

 
 
 
 
 

Python

 
1
2
from pprint import pprint
pprint(my_dict)

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

 
 
 
 
 

Python

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

三元运算

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

 
 
 
 
 

Python

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

Python的优雅写法的更多相关文章

  1. Android点滴---ViewHolder通用,优雅写法

    近期在做项目时,又要写 ViewHolder. 突然想到网上看看有没什么好的写法! 不知道你是不是也烦透了写那些没有技术含量的ViewHolder 看看这些.也许会有收获! 然后就找到了以下两篇文章( ...

  2. python 如何优雅地退出子进程

    python 如何优雅地退出子进程 主进程产生子进程,子进程进入永久循环模式.当主进程要求子进程退出时,如何能安全地退出子进程呢? 参考一些代码,我写了这个例子.运行之后,用kill pid试试.pi ...

  3. javascript与php与python的函数写法区别与联系

    1.javascript函数写法种类: (一).第一种 function test(param){ return 111; } (二).第二种 var test = function(param){ ...

  4. JavaScript复杂判断的更优雅写法

    摘要: 写代码是一门艺术. 原文:JavaScript 复杂判断的更优雅写法 作者:Think. 公众号:大转转fe Fundebug经授权转载,版权归原作者所有. 前提 我们编写js代码时经常遇到复 ...

  5. JavaScript 复杂判断的优雅写法

    JavaScript 复杂判断的优雅写法 <div> <input type="button" name="btn" value=" ...

  6. Python脚本语言写法

    Python脚本语言写法 脚本语言的开始行,是指文件中的代码用什么可执行程序去运行它,就这么简单. #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的pyth ...

  7. 让Python更优雅更易读(第二集)

    友情链接 让Python更优雅更易读(第一集) 1.装饰器 1.1装饰器特别适合用来实现以下功能 运行时校验:在执行阶段进行特定校验,当校验通不过时终止执行. 适合原因:装饰器可以方便地在函数执行前介 ...

  8. python优雅写法

    在这篇文章中我将和大家分享一些真正有用的技巧和窍门,这些技巧和窍门你们之前可能并不知道.所以不浪费时间了,让我们直接来看看这些内容吧: 枚举 之前我们这样操作: 1 2 3 4 i = 0 for i ...

  9. 让你的 Python 代码优雅又地道

    示例代码和引用的语录都来自Raymond的演讲.这是我按我的理解整理出来的,希望你们理解起来跟我一样顺畅! 遍历一个范围内的数字 for i in [0, 1, 2, 3, 4, 5]: print  ...

随机推荐

  1. oracle:存储过程和触发器

    存储过程(stored procedure) :可以看作带名字的pl/sql程序块:通过名字调用执行:可以带参数或不带参数. 触发器(trigger):通过事件触发执行,可看成特殊类型的存储过程. 下 ...

  2. 搭建nginx代理,为前端页面跨域调用接口

    前端同学因开发需要,本地搭建的服务需要调用其它域名的接口,在帮助正确配置后,已能正常使用. 这里写一篇博客,记录一下. 前端页面地址为127.0.0.1:9813/a.html 接口地址http:// ...

  3. nodejs学习笔记一( sublime、atom开发环境,http模块,fs模块的初识)

    http服务   let server = http.createServer(function(req,res){       });   监听: server.listen(8080);   re ...

  4. unity简易ui框架

    在unity项目开发中,ui模块的开发往往占据了很大一部分工作,部分游戏甚至绝大部分的工作都是在ui上,如何高效管理各种界面,这里分享一套高效易用的UI框架. 首先,我们定义一个PanelBase类, ...

  5. python爬虫实战(八)--------知乎

    相关代码已经修改调试成功----2017-4-22 一.说明 1.目标网址:知乎登入后的首页 2.实现:如图字段的爬取 zhihu_question表: zhihu_answer表: 3.数据:存放在 ...

  6. 1.Java设计模式-工厂模式

    1.简单工厂模式(Factory Method) 常用的工厂模式是静态工厂模式,利用static修饰方法,作为一种类似于常见的工具类Utils等辅助效果,一般情况下工厂类不需要实例化. //1.定义一 ...

  7. Code Signal_练习题_arrayChange

    You are given an array of integers. On each move you are allowed to increase exactly one of its elem ...

  8. 面向对象,继承,浏览器,上传文件, ajax

    'use strict'; //父类 class Student2{ constructor(name){ this.name = name || 'tom'; } hello(){ console. ...

  9. 为什么推荐用ui-router替代ngRoute

    初学angularjs,第一个实例是官网的phoneCat,里面路由用的是ngRoute,后来看到别的用ui-router,觉得好奇,ui-route是什么呢?百度一些,得到如下解释: ui-rout ...

  10. ORA-16014: log 3 sequence# 540 not archived, no available destinations

    https://blog.csdn.net/zonelan/article/details/7329369