总结Python编程中三条常用的技巧


Posted in Python onMay 11, 2015

在 python 代码中可以看到一些常见的 trick,在这里做一个简单的小结。
json 字符串格式化

在开发 web 应用的时候经常会用到 json 字符串,但是一段比较长的 json 字符串是可读性较差的,不容易看出来里面结构的。 这时候就可以用 python 来把 json 字符串漂亮的打印出来。

root@Exp-1:/tmp# cat json.txt 
{"menu": {"breakfast": {"English Muffin": {"price": 7.5}, "Bread Basket": {"price": 20, "desc": "Assortment of fresh baked fruit breads and muffins"}, "Fruit Breads": {"price": 8}}, "drink": {"Hot Tea": {"price": 5}, "Juice": {"price": 10, "type": ["apple", "watermelon", "orange"]}}}}
root@Exp-1:/tmp# 
root@Exp-1:/tmp# cat json.txt | python -m json.tool
{
  "menu": {
    "breakfast": {
      "Bread Basket": {
        "desc": "Assortment of fresh baked fruit breads and muffins",
        "price": 20
      },
      "English Muffin": {
        "price": 7.5
      },
      "Fruit Breads": {
        "price": 8
      }
    },
    "drink": {
      "Hot Tea": {
        "price": 5
      },
      "Juice": {
        "price": 10,
        "type": [
          "apple",
          "watermelon",
          "orange"
        ]
      }
    }
  }
}
root@Exp-1:/tmp#

else 的妙用

在某些场景下我们需要判断我们是否是从一个 for 循环中 break 跳出来的,并且只针对 break 跳出的情况做相应的处理。这时候我们通常的做法是使用一个 flag 变量来标识是否是从 for 循环中跳出的。 如下面的这个例子,查看在 60 到 80 之间是否存在 17 的倍数。

flag = False
for item in xrange(60, 80):
  if item % 17 == 0:
    flag = True
    break

if flag:
  print "Exists at least one number can be divided by 17"

其实这时候可以使用 else 在不引入新变量的情况下达到同样的效果

for item in xrange(60, 80):
  if item % 17 == 0:
    flag = True
    break
else:
  print "exist"

setdefault 方法

dictionary 是 python 一个很强大的内置数据结构,但是使用起来还是有不方便的地方,比如在多层嵌套的时候我们通常会这么写

dyna_routes = {}
method = 'GET'
whole_rule = None
# 一些其他的逻辑处理
...
if method in dyna_routes:
  dyna_routes[method].append(whole_rule)
else:
  dyna_routes[method] = [whole_rule]

其实还有一种更简单的写法可以达到同样的效果

self.dyna_routes.setdefault(method, []).append(whole_rule)

或者可以使用 collections.defaultdict 模块

import collections
dyna_routes = collections.defaultdict(list)
...
dyna_routes[method].append(whole_rule)

Python 相关文章推荐
Python里disconnect UDP套接字的方法
Apr 23 Python
python计算时间差的方法
May 20 Python
浅析python中的分片与截断序列
Aug 09 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
Python 判断是否为质数或素数的实例
Oct 30 Python
numpy基础教程之np.linalg
Feb 12 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 Python
Python迭代器协议及for循环工作机制详解
Jul 14 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 Python
python求解水仙花数的方法
May 11 #Python
pymongo为mongodb数据库添加索引的方法
May 11 #Python
python判断windows系统是32位还是64位的方法
May 11 #Python
Python中使用装饰器时需要注意的一些问题
May 11 #Python
python在linux系统下获取系统内存使用情况的方法
May 11 #Python
Python实现登录人人网并抓取新鲜事的方法
May 11 #Python
python实现中文输出的两种方法
May 09 #Python
You might like
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
ThinkPHP安装和设置
2015/07/27 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
AngularJS中filter的使用实例详解
2017/08/25 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Django框架视图介绍与使用详解
2019/07/18 Python
jupyter实现重新加载模块
2020/04/16 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
婚礼证婚人证婚词
2014/01/13 职场文书
总经理司机职责
2014/02/02 职场文书
九年级语文教学反思
2014/02/04 职场文书
少年闰土教学反思
2014/02/22 职场文书
爱与责任演讲稿
2014/05/20 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
庆祝教师节主持词
2015/07/06 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
python中urllib包的网络请求教程
2022/04/19 Python