总结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实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
Python实现修改IE注册表功能示例
May 10 Python
Python pymongo模块常用操作分析
Sep 01 Python
解决Python2.7中IDLE启动没有反应的问题
Nov 30 Python
对python requests发送json格式数据的实例详解
Dec 19 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
python实现证件照换底功能
Aug 20 Python
python字符串替换re.sub()实例解析
Feb 09 Python
python Shapely使用指南详解
Feb 18 Python
一些关于python 装饰器的个人理解
Aug 31 Python
call在Python中改进数列的实例讲解
Dec 09 Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
Python求解平方根的方法
2015/03/11 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
某同学的自我鉴定范文
2013/12/26 职场文书
采购部经理岗位职责
2014/02/10 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
借名购房协议书范本
2014/10/06 职场文书
初婚未育证明样本
2014/10/24 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
计算机专业自荐信
2015/03/05 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android