总结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使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
Python编写简单的HTML页面合并脚本
Jul 11 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
Python中你应该知道的一些内置函数
Mar 31 Python
python+selenium实现自动抢票功能实例代码
Nov 23 Python
Python实现简单查找最长子串功能示例
Feb 26 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
python实现简单银行管理系统
Oct 25 Python
pytorch数据预处理错误的解决
Feb 20 Python
使用OpenCV对车道进行实时检测的实现示例代码
Jun 19 Python
python 自动识别并连接串口的实现
Jan 19 Python
python编程实现清理微信重复缓存文件
Nov 01 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在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
一个php作的文本留言本的例子(四)
2006/10/09 PHP
php获取操作系统语言代码
2013/11/04 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
JavaScript库 开发规则
2009/01/31 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
node.js的http.createServer过程深入解析
2019/06/06 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
请解释流与文件有什么不同
2016/07/29 面试题
财务会计大学生自我评价
2014/04/09 职场文书
收款委托书范本
2014/09/11 职场文书
大雁塔英文导游词
2015/02/10 职场文书
2015年调度员工作总结
2015/04/30 职场文书
创业计划书之甜品店
2019/09/18 职场文书
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs