总结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浅拷贝与深拷贝用法实例
May 09 Python
Python通过正则表达式选取callback的方法
Jul 18 Python
Python上传package到Pypi(代码简单)
Feb 06 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
Apr 17 Python
Python函数参数操作详解
Aug 03 Python
python使用folium库绘制地图点击框
Sep 21 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
python 中xpath爬虫实例详解
Aug 26 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
500行python代码实现飞机大战
Apr 24 Python
Python实现自动玩连连看的脚本分享
Apr 04 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
DIY实用性框形天线
2021/03/02 无线电
php结合飞信 免费天气预报短信
2009/05/07 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
python实现简单加密解密机制
2019/03/19 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
公关关系专员的自我评价分享
2013/11/20 职场文书
环境日宣传活动总结
2014/07/09 职场文书
敬老月活动总结
2014/08/28 职场文书
二人合伙经营协议书
2014/09/13 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
患者身份识别制度
2015/08/06 职场文书
中学总务处工作总结
2015/08/12 职场文书
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技