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

在 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)
(0)

相关推荐

  • Python进阶篇之字典操作总结

    一.与字典值有关的计算 问题 想对字典的值进行相关计算,例如找出字典里对应值最大(最小)的项. 解决方案一: 假设要从字典 {'a':3, 'b':2, 'c':6} 中找出值最小的项,可以这样做: >>> d = {'a':3, 'b':2, 'c':6} >>> min(zip(d.values(), d.keys())) (2, 'b') 值得注意的是  d.values() 获取字典的全部值,d.keys() 获取字典的全部键,而且两个序列的顺序依然保持一一对应

  • python常用知识梳理(必看篇)

    接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理: 1)避免'\n'等特殊字符的两种方式: a)利用转义字符'\' b)利用原始字符'r' print r'c:\now' 2)单行注释,使用一个#,如: #hello Python 多行注释,使用三个单引号(或三个双引号),如: '''hello python hello world''' 或 """hello python hello world""" 另外跨越多行

  • 初学python的操作难点总结(新手必看篇)

    如下所示: 1 在cmd下 盘与盘之间的切换 直接 D或d: 就好 2 查找当前盘或者文件下面的目录 直接 dir 3 想在一个盘下进去一个文件夹,用cd空格目标文件 cd p 4 写文件的第一个字母后 按tab键自动补全 如果有多个p开头的则在按tab 会在所有之间切换 5 d:切盘 dir 查找目录 cd 进去目标文件(相当于双击) 6 往上走一层 cd .. 走两层 cd ../..(之间有无空格都行) 7 用python打开一个预先用记事本打好的txt 则先打开python f:\Dem

  • Python中字符串的常见操作技巧总结

    本文实例总结了Python中字符串的常见操作技巧.分享给大家供大家参考,具体如下: 反转一个字符串 >>> S = 'abcdefghijklmnop' >>> S[::-1] 'ponmlkjihgfedcba' 这种用法叫做three-limit slices 除此之外,还可以使用slice对象,例如 >>> 'spam'[slice(None, None, -1)] >>> unicode码与字符(single-characte

  • Python新手入门最容易犯的错误总结

    前言 Python 以其简单易懂的语法格式与其它语言形成鲜明对比,初学者遇到最多的问题就是不按照 Python 的规则来写,即便是有编程经验的程序员,也容易按照固有的思维和语法格式来写 Python 代码,之前小编给大家分享过了一篇<Python新手们容易犯的几个错误总结>,但总结的不够全面,最近看到有一个外国小伙总结了一些大家常犯的错误,16 Common Python Runtime Errors Beginners Find,索性我把他翻译过来并在原来的基础补充了我的一些理解,希望可以让

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

    在 python 代码中可以看到一些常见的 trick,在这里做一个简单的小结. json 字符串格式化 在开发 web 应用的时候经常会用到 json 字符串,但是一段比较长的 json 字符串是可读性较差的,不容易看出来里面结构的. 这时候就可以用 python 来把 json 字符串漂亮的打印出来. root@Exp-1:/tmp# cat json.txt {"menu": {"breakfast": {"English Muffin":

  • 浅谈Python编程中3个常用的数据结构和算法

    本篇文章将介绍3种常见的数据结构和同数据有关的算法.此外,在collections模块中也包含了针对各种数据结构的解决方案. Python内置了许多非常有用的数据结构,比如列表(list).集合(set)以及字典(dictionary).就绝大部分情况而言,我们可以直接使用这些数据结构.但是,通常我们还需要考虑比如搜索.排序.排列以及筛选等这一类常见的问题. 本篇文章将介绍3种常见的数据结构和同数据有关的算法.此外,在collections模块中也包含了针对各种数据结构的解决方案. 1. 将序列

  • Python编程中实现迭代器的一些技巧小结

    yield实现迭代器 如引言中的描述,实现一个可迭代的功能要是每次都手动实现iter,next稍稍有点麻烦,所需的代码也是比较客观.在python中也能通过借助yield的方式来实现一个迭代器.yield有一个关键的作能,它能够中断当前的执行逻辑,保持住现场(各种值的状态,执行的位置等等),返回相应的值,下一次执行的时候能够无缝的接着上次的地方继续执行,如此循环反复知道满足事先设置的退出条件或者发生错误强制被中断. 其具体功能是可以当return使用,从函数里返回一个值,不同之处是用yield返

  • Python编程中NotImplementedError的使用方法

    Python编程中raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制.在面向对象编程中,可以先预留一个方法接口不实现,在其子类中实现. 如果要求其子类一定要实现,不实现的时候会导致问题,那么采用raise的方式就很好. 而此时产生的问题分类是NotImplementedError. 写一段代码如下: class ClassDemo: def test_demo(self): raiseNotImplementedError("my test: not implemented!&

  • Python编程中的反模式实例分析

    本文实例讲述了Python编程中的反模式.分享给大家供大家参考.具体分析如下: Python是时下最热门的编程语言之一了.简洁而富有表达力的语法,两三行代码往往就能解决十来行C代码才能解决的问题:丰富的标准库和第三方库,大大节约了开发时间,使它成为那些对性能没有严苛要求的开发任务的首选:强大而活跃的社区,齐全的文档,也使很多编程的初学者选择了它作为自己的第一门编程语言.甚至有国外的报道称,Python已经成为了美国顶尖大学里最受欢迎的编程入门教学语言. 要学好一门编程语言实属不易,在初学阶段,就

  • Python编程中非常重要却又被严重低估的库decorator

    目录 常规的装饰器 使用神库 带参数的装饰器 签名问题有解决? 总结一下 本文已经收录于<Python黑魔法手册>v2.1 版本,在线文档请前往 Python黑魔法手册 2.0 文档 这个库可以帮你做什么呢 ? 其实很简单,就是可以帮你更方便地写python装饰器代码,更重要的是,它让 Python 中被装饰器装饰后的方法长得更像装饰前的方法. 不了解装饰器的可以先去阅读我们之前的文章,非常全且详细的介绍了装饰器的各种实现方法. 常规的装饰器 下面这是一个最简单的装饰器示例,在运行 myfun

  • Python Numpy中数据的常用保存与读取方法

    在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件进行介绍: 1.保存为二进制文件(.npy/.npz) numpy.save 保存一个数组到一个二进制的文件中,保存格式是.npy 参数介绍 numpy.save(file, arr, allow_pickle=True, fix_imports=True) file:文件名/文件路径 arr:要存

  • python 已知三条边求三角形的角度案例

    我就废话不多说了,还是直接看代码吧! import math a=1;//边1 b=1;//边2 c=math.sqrt(2);//边3 A=math.degrees(math.acos((a*a-b*b-c*c)/(-2*b*c)))//夹角1 B=math.degrees(math.acos((b*b-a*a-c*c)/(-2*a*c)))//夹角2 C=math.degrees(math.acos((c*c-a*a-b*b)/(-2*a*b)))//夹角3 print(A) print(B

  • Python编程中*args与**kwargs区别作用详解

    相信学Python的小伙伴肯定有这样的尴尬局面,给一个函数不会用, 原因是:不知道参数列表中的类型是什么意思,比如初学者都会疑问的:*args和**kwargs到底是怎么用. 当你知道这个时,我猜你肯定能会用好多函数了! #*args的用法:当传入的参数个数未知,且不需要知道参数名称时. def func_arg(farg, *args): print("formal arg:", farg) for arg in args: print("another arg:"

  • Python编程中闭包的变量作用域问题解析

    目录 闭包 闭包中的变量 闭包 ​ 在我们使用返回函数的时候,由于我们在一个函数中需要返回另一个函数,因此,我们在这个函数中就需要重新定义一个函数.而这样,就造成了我们的函数嵌套问题.外面的函数相对于里面的函数而言是外函数(outer function),而里面的我们叫他内函数(inner function). def outerFunction(): #外函数 def innerFunction(): #内函数 x = 1 return x return innerFunction #返回值是

随机推荐