总结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之print详解
Sep 28 Python
python创建列表并给列表赋初始值的方法
Jul 28 Python
使用pyecharts无法import Bar的解决方案
Apr 23 Python
python使用多进程的实例详解
Sep 19 Python
Window环境下Scrapy开发环境搭建
Nov 18 Python
Python常见数据结构之栈与队列用法示例
Jan 14 Python
python正则-re的用法详解
Jul 28 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
python3 使用traceback定位异常实例
Mar 09 Python
Python实现捕获异常发生的文件和具体行数
Apr 25 Python
golang/python实现归并排序实例代码
Aug 30 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 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+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
mysql 字段类型说明
2007/04/27 PHP
php5.4传引用时报错问题分析
2016/01/22 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
Python FTP操作类代码分享
2014/05/13 Python
Python实现抢购IPhone手机
2018/02/07 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
Python如何获取文件路径/目录
2020/09/22 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
技术总监的工作职责
2013/11/13 职场文书
业务经理的岗位职责
2013/11/16 职场文书
20岁生日感言
2014/01/13 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
新党章的学习心得体会
2014/11/07 职场文书
2014年团队工作总结
2014/11/24 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
民事答辩状格式范文
2015/05/21 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
期中考试后的感想
2015/08/07 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js