“惯例”这个词指的是“习惯的做法,常规的办法,一贯的做法”,与这个词对应的英文单词叫“idiom”。由于Python跟其他很多编程语言在语法和使用上还是有比较显著的差别,因此作为一个Python开发者如果不能掌握这些惯例,就无法写出“Pythonic”的代码。下面我们总结了一些在Python开发中的惯用的代码。

  1. 让代码既可以被导入又可以被执行。

    if __name__ == '__main__':
  2. 用下面的方式判断逻辑“真”或“假”。

    if x:
    if not x:

    好的代码:

    name = 'jackfrued'
    fruits = ['apple', 'orange', 'grape']
    owners = {'1001': '骆昊', '1002': '王大锤'}
    if name and fruits and owners:
    print('I love fruits!')

    不好的代码:

    name = 'jackfrued'
    fruits = ['apple', 'orange', 'grape']
    owners = {'1001': '骆昊', '1002': '王大锤'}
    if name != '' and len(fruits) > 0 and owners != {}:
    print('I love fruits!')
  3. 善于使用in运算符。

    if x in items: # 包含
    for x in items: # 迭代

    好的代码:

    name = 'Hao LUO'
    if 'L' in name:
    print('The name has an L in it.')

    不好的代码:

    name = 'Hao LUO'
    if name.find('L') != -1:
    print('This name has an L in it!')
  4. 不使用临时变量交换两个值。

    a, b = b, a
  5. 用序列构建字符串。

    好的代码:

    chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd']
    name = ''.join(chars)
    print(name) # jackfrued

    不好的代码:

    chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd']
    name = ''
    for char in chars:
    name += char
    print(name) # jackfrued
  6. EAFP优于LBYL。

    EAFP - Easier to Ask Forgiveness than Permission.

    LBYL - Look Before You Leap.

    好的代码:

    d = {'x': '5'}
    try:
    value = int(d['x'])
    print(value)
    except (KeyError, TypeError, ValueError):
    value = None

    不好的代码:

    d = {'x': '5'}
    if 'x' in d and isinstance(d['x'], str) \
    and d['x'].isdigit():
    value = int(d['x'])
    print(value)
    else:
    value = None
  7. 使用enumerate进行迭代。

    好的代码:

    fruits = ['orange', 'grape', 'pitaya', 'blueberry']
    for index, fruit in enumerate(fruits):
    print(index, ':', fruit)

    不好的代码:

    fruits = ['orange', 'grape', 'pitaya', 'blueberry']
    index = 0
    for fruit in fruits:
    print(index, ':', fruit)
    index += 1
  8. 用生成式生成列表。

    好的代码:

    data = [7, 20, 3, 15, 11]
    result = [num * 3 for num in data if num > 10]
    print(result) # [60, 45, 33]

    不好的代码:

    data = [7, 20, 3, 15, 11]
    result = []
    for i in data:
    if i > 10:
    result.append(i * 3)
    print(result) # [60, 45, 33]
  9. 用zip组合键和值来创建字典。

    好的代码:

    keys = ['1001', '1002', '1003']
    values = ['骆昊', '王大锤', '白元芳']
    d = dict(zip(keys, values))
    print(d)

    不好的代码:

    keys = ['1001', '1002', '1003']
    values = ['骆昊', '王大锤', '白元芳']
    d = {}
    for i, key in enumerate(keys):
    d[key] = values[i]
    print(d)

Python惯例的更多相关文章

  1. python pythonic是什么?

    原文地址:http://faassen.n--tree.net/blog/view/weblog/2005/08/06/0 注:Martijn 是 Zope 领域的专家,他为 Zope 系列产品做了许 ...

  2. Reading | 《Python基础教程》第1次阅读

    目录 一.基础知识 1.数和表达式 浮点除法和整数除法 负数整除和取余 圆整 乘方运算 2.变量名 3.获取用户输入 4.模块 5.让脚本像普通程序一样 6.字符串 单.双引号 引号的转义 字符串拼接 ...

  3. python基础===Python 迭代器模块 itertools 简介

    本文转自:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...

  4. python基础=== itertools介绍(转载)

    原文链接:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...

  5. Github标星过万,Python新手100天学习计划。

    大数据文摘编辑部出品 作为目前最火也是最实用的编程语言,Python不仅是新手入门程序界的首选,也逐渐成为了从大厂到小厂,招牌需求list的必要一条. 当然,学Python这件事情,你可能也和文摘菌一 ...

  6. Github标星过万,Python新手100天学习计划,这次再学不会算我输!

      作为目前最火也是最实用的编程语言,Python不仅是新手入门程序界的首选,也逐渐成为了从大厂到小厂,招牌需求list的必要一条. 当然,学Python这件事情,你可能也和文摘菌一样,已经下了一百次 ...

  7. classmethod一个用处是创建可选类构造器

    Definition and Introduction通常来说, descriptor 是一种绑定着特殊行为属性的对象, 在访问它时行为被descriptor协议定义的方法所重载.这些方法是__get ...

  8. Pythonic到底是什么玩意儿?

    http://blog.csdn.net/gzlaiyonghao/article/details/2762251 作者:Martijn Faassen 译者:赖勇浩(http://blog.csdn ...

  9. 迭代器模块 itertools

    无限迭代器 itertools 包自带了三个可以无限迭代的迭代器.这意味着,当你使用他们时,你要知道你需要的到底是最终会停止的迭代器,还是需要无限地迭代下去. 这些无限迭代器在生成数字或者在长度未知的 ...

随机推荐

  1. 从尾到头打印列表——牛客剑指offer

    题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路 思路1: 顺序遍历链表,取出每个结点的数据,插入list中. 由于要求list倒序存储链表中的数据,而我们是顺序取 ...

  2. IntelliJ IDEA setup JDK无效

    参考 问题现象:功能全部爆红,总是提示“setup JDK”,设置JDK后无效.但程序能够正常编译和运行. 解决方法:  File -> Invalidate Caches/Restart -& ...

  3. 获取iframe中的tree

    window.frames["iframe_name"].document.getElementById("..."); 或者 window.frames['i ...

  4. sql--inner join , out join

    inner join(又叫join) out join包括left join,right join和full join(也就是left+right)

  5. [转载]for、foreach、iterator的用法及效率区别

    来源:https://www.jianshu.com/p/bbb220824c9a 1.在形式上 for的形式是 for(int i=0;i<arr.size();i++){...} forea ...

  6. jquery 滚动事件-记录自己常用的

    1.h5端页面滑动至第3屏及以后才出现置顶按钮 $(document).scroll(function() { var scroH = $(document).scrollTop(); //滚动高度 ...

  7. mysql explain解析一 extra中的using index,using where,using index condition

    1.简单介绍 using index 和using where只要使用了索引我们基本都能经常看到,而using index condition则是在mysql5.6后新加的新特性,我们先来看看mysq ...

  8. Mysql检查列是否存在并新增、修改、删除列

    在MYSQL中,新增.修改.删除列时不能进行IF EXISTS判断,IF语句只能出现在存储过程当中,故博主用存储过程的方法新增.修改.删除列,修改列名称. DROP PROCEDURE IF EXIS ...

  9. Delphi Timer组件

  10. 00:Java简单了解

    浅谈Java之概述 Java是SUN(Stanford University Network),斯坦福大学网络公司)1995年推出的一门高级编程语言.Java是一种面向Internet的编程语言.随着 ...