python优雅写法
在这篇文章中我将和大家分享一些真正有用的技巧和窍门,这些技巧和窍门你们之前可能并不知道。所以不浪费时间了,让我们直接来看看这些内容吧:
枚举
之前我们这样操作:
|
1
2
3
4
|
i = 0for 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 astmy_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 pdbpdb.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 pprintpprint(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, 25small = x if x < y else y |
这就是今天所有的内容。希望你们能喜欢这篇文章,并且从这篇文章能学到一两个技巧供以后使用。我们下篇文章再见吧。更多内容敬请关注我们的Facebook和Twitter!
python优雅写法的更多相关文章
- Android点滴---ViewHolder通用,优雅写法
近期在做项目时,又要写 ViewHolder. 突然想到网上看看有没什么好的写法! 不知道你是不是也烦透了写那些没有技术含量的ViewHolder 看看这些.也许会有收获! 然后就找到了以下两篇文章( ...
- JavaScript复杂判断的更优雅写法
摘要: 写代码是一门艺术. 原文:JavaScript 复杂判断的更优雅写法 作者:Think. 公众号:大转转fe Fundebug经授权转载,版权归原作者所有. 前提 我们编写js代码时经常遇到复 ...
- JavaScript 复杂判断的优雅写法
JavaScript 复杂判断的优雅写法 <div> <input type="button" name="btn" value=" ...
- 用Python优雅的写出送给女儿的藏头诗
2016年迎来了我的小土匪,忙活了一年,在17年的4月加班的夜里因思念以小土匪的名字写了一首藏头发了朋友圈,不温不火,最近在看python,那么如何用python优雅的用写出这首诗了? 执行 代码 i ...
- 会了这十种Python优雅的写法,让你工作效率翻十倍,一人顶十人用!
我们都知道,Python 的设计哲学是「优雅」.「明确」.「简单」.这也许很多人选择 Python 的原因.但是我收到有些伙伴反馈,他写的 Python 并不优雅,甚至很臃肿,那可能是你的姿势不对 ...
- Python的优雅写法
枚举 之前我们这样操作: Python 1 2 3 4 i = 0 for item in iterable: print i, item i += 1 现在我 ...
- 符合语言习惯的Python优雅编程技巧
Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然.要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀 ...
- 符合语言习惯的 Python 优雅编程技巧
Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然.要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀 ...
- 如何用python“优雅的”调用有道翻译?
前言 其实在以前就盯上有道翻译了的,但是由于时间问题一直没有研究(我的骚操作还在后面,记得关注),本文主要讲解如何用python调用有道翻译,讲解这个爬虫与有道翻译的js“斗争”的过程! 当然,本文仅 ...
随机推荐
- XML格式与实体类的转换
背景 本人头一回写博客,请大家多多关照.通过读取XML文件获取用户管理权限,其中涉及三部分: 1.XML文件的生成: 2.XML文件的读取: 3.XML文件的保存: 如何做 第一步:自己先将XML文件 ...
- STL笔记(こ)--删除数组中重复元素
使用STL中的Unique函数: #include<bits/stdc++.h> using namespace std; void fun(int &n) //配套for_eac ...
- 牛客小白月赛5 G 异或(xor) 【找规律】
题目链接: https://www.nowcoder.com/acm/contest/135/g 题目描述 从前,Apojacsleam家的水族箱里,养了一群热带鱼. 在这几条热带鱼里,Apojacs ...
- Http请求 GET和POST,405错误
我就简单说吧,在用SringMVC时,我们通常会用到 @RequestMapping(value="/test",method=RequestMethod.GET) public ...
- k8s使用自定义证书将客户端认证接入到API Server
自定义证书使用kubectl认证接入API Serverkubeconfig是API Server的客户端连入API Server时使用的认证格式的客户端配置文件.使用kubectl config v ...
- Ajax基础知识梳理
Ajax用一句话来说就是无须刷新页面即可从服务器取得数据.注意,虽然Ajax翻译过来叫异步JavaScript与XML,但是获得的数据不一定是XML数据,现在服务器端返回的都是JSON格式的文件. 完 ...
- h5获取摄像头拍照功能
完整代码展示 <!DOCTYPE html> <head> <title>HTML5 GetUserMedia Demo</title> <met ...
- Android四大基本组件介绍及生命周期
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一.了解四大基本组件 Activity ...
- (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)
1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...
- HDU2586 How far away ?
一.描述 很久没写代码了,在之前一直在参与准备ASC比赛和美赛,现在又重新捡起来.目标是两个月后的邀请赛. 这题是树链拋分解决LCA问题的一个模板题. 首先介绍下树链拋分的基本思想. 对于任意一颗树, ...