Python的优雅写法
枚举
之前我们这样操作:
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的优雅写法的更多相关文章
- Android点滴---ViewHolder通用,优雅写法
近期在做项目时,又要写 ViewHolder. 突然想到网上看看有没什么好的写法! 不知道你是不是也烦透了写那些没有技术含量的ViewHolder 看看这些.也许会有收获! 然后就找到了以下两篇文章( ...
- python 如何优雅地退出子进程
python 如何优雅地退出子进程 主进程产生子进程,子进程进入永久循环模式.当主进程要求子进程退出时,如何能安全地退出子进程呢? 参考一些代码,我写了这个例子.运行之后,用kill pid试试.pi ...
- javascript与php与python的函数写法区别与联系
1.javascript函数写法种类: (一).第一种 function test(param){ return 111; } (二).第二种 var test = function(param){ ...
- JavaScript复杂判断的更优雅写法
摘要: 写代码是一门艺术. 原文:JavaScript 复杂判断的更优雅写法 作者:Think. 公众号:大转转fe Fundebug经授权转载,版权归原作者所有. 前提 我们编写js代码时经常遇到复 ...
- JavaScript 复杂判断的优雅写法
JavaScript 复杂判断的优雅写法 <div> <input type="button" name="btn" value=" ...
- Python脚本语言写法
Python脚本语言写法 脚本语言的开始行,是指文件中的代码用什么可执行程序去运行它,就这么简单. #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的pyth ...
- 让Python更优雅更易读(第二集)
友情链接 让Python更优雅更易读(第一集) 1.装饰器 1.1装饰器特别适合用来实现以下功能 运行时校验:在执行阶段进行特定校验,当校验通不过时终止执行. 适合原因:装饰器可以方便地在函数执行前介 ...
- python优雅写法
在这篇文章中我将和大家分享一些真正有用的技巧和窍门,这些技巧和窍门你们之前可能并不知道.所以不浪费时间了,让我们直接来看看这些内容吧: 枚举 之前我们这样操作: 1 2 3 4 i = 0 for i ...
- 让你的 Python 代码优雅又地道
示例代码和引用的语录都来自Raymond的演讲.这是我按我的理解整理出来的,希望你们理解起来跟我一样顺畅! 遍历一个范围内的数字 for i in [0, 1, 2, 3, 4, 5]: print ...
随机推荐
- bug: 1.eclipse 中tomcat server 变灰色 2.build path 添加的jar不识别
1.网上百度的方案试过,没有作用. 最后删掉tomcat重新解压配置解决. 确保工程属性栏中,server正确才可加载tomcat. 猜测可能原因,tomcat在eclipse有时崩溃,一般做法是将s ...
- Codeforces 985G. Team Players
Description 有 \(n\) 个人 , \(m\) 对人有冲突 , 你要从这 \(n\) 个人中选出三个人成为一组 , 使得同一组的人不存在一对有冲突 题面 Solution 容斥 答案=总 ...
- ASP.Net 之委托事件
1.首先给一张图让大家了解什么是委托?它的优缺点是什么? 2.通过代码的运用更深入地了解委托事件(窗体应用程序) 1)下面我们先定义一个无参数的委托. //1.0 定义一个自定义的委托,此委托的签名是 ...
- JS 监听键盘按键
1. 实现Ctrl+ Enter 组合键触发事件 document.onkeydown=function(event){ var keyNum = window.event ? event.keyCo ...
- JDBC入门(3)--- PrepareStatement
一.PrepareStatement概述 PrepareStatement是Statement接口的子接口: 1.强大之处: 防SQL攻击: 提高代码的可读性: 提高效率; 2.PrepareStat ...
- textarea的maxlength属性兼容解决方案
IE10版本的textarea才支持maxlength属性:低版本的IE都不兼容,实际上低版本的IE的市场存在率还是很高的: 所以还是很有必要来整合一套解决方案的: Jquery版本 $(functi ...
- LOJ572: Misaka Network 与求和
传送门 假设 \(f^k(i)\) 就是 \(f(i)\) 莫比乌斯反演得到 \[ans=\sum_{i=1}^{N}\lfloor\frac{N}{i}\rfloor^2\sum_{d|i}f(d) ...
- curl 模拟发起百度地图API post请求
注:开始做的是get请求,比较简单,然后又查询了一番就做成了post请求,有几个地方特别说明一下: 一,$address,是必须传的,$city可不传: 二,ak跟之前的key一直,需要申请,我的好像 ...
- Java设计模式—代理模式
代理模式(Proxy Pattern)也叫做委托模式,是一个使用率非常高的模式. 定义如下: 为其他对象提供一种代理以控制对这个对象的访问. 个人理解: 代理模式将原类进行封装, ...
- android热加载随记
在我们日常的开发过程中,程序难免会出现BUG,一般有集中处理方式,发布新版本APP让用户来升级,或者打补丁来修复bug 前者本文在这里不错讨论,打补丁升级又分为两种一种是需要重启应用,一种是不需要.不 ...