• 编写高质量Python程序(一)基本准则


    本系列文章为《编写高质量代码——改善Python程序的91个建议》的精华汇总。

    文章首发于公众号【Python与算法之路】

    理解Pythonic概念

    • 什么是 Pythonic?

      Pythonic的代码就是具有Python独特风格的代码。通俗说来,就是在保证代码可读性的前提下,尽可能地简洁、优雅,看起来像伪代码一样。

    • 具有 Python 代码风格的例子

      • 交换两个变量。其他语言交换两个变量时,一般需要一个临时的中间变量,而Python中可以用一行代码直接交换。
      • for循环直接遍历容器。其他语言中,需要根据索引下标i对容器进行遍历,而Python可以用for循环直接遍历容器。
      • 使用 str.format() 格式化字符串,是最Pythonic的字符串格式化方法。
    # 交换两个变量
    a, b = b, a
    
    # for循环遍历容器
    for elem in alist:
        do_sth_with(elem)
    
    # format格式化字符串
    print("{greet} from {language}!".format(greet="hello, world!", language="Python"))
    
    • Python的库和框架:现有的框架就好比现有的“轮子”,学会利用这些框架,不重复造轮子。

    编写Pythonic代码

    注意要避免的事:

    • 避免只用大小写来区分不同的对象。
    • 避免使用容易混淆的名称。
    • 不要害怕过长的变量名。能表达清楚变量代表的含义即可。

    深入理解Pythonic的几个途径:

    • 学习语言特性和库特性时,从官方文档入手, 仿照他们的书写规范。
    • Python的版本更新快,跟进前言,掌握新特性。
    • 学习业界公认的Pythonic代码,如Flask、gevent和requests等。

    理解Python和C语言的不同之处

    • “缩进”和“{}”: C语言用花括号{}分隔代码块,Python中用缩进分隔,避免混用空格和Tab键。
    • '" 在C语言中,单引号'表示单个的字符型数据(char),双引号"表示字符串,默认以结尾;在Python中,'"无明显区别。
    • 三元操作符?: C语言中的三元操作符 C?X:Y,表示当条件C为True的时候,取值X,否则取值Y。在Python中的等价形式为 X if C else Y
    • switch...case: C语言中的switch...case分支语句,Python中可以使用if...elif...else...代替。

    在代码中添加注释

    Python中有3种形式注释:

    • 块注释
    • 行注释
    • 文档注释(dostring)

    需要注意:

    1. 使用块或行注释时,仅仅注释那些复杂操作、算法,还有那些难以理解的、不够一目了然的代码。
    2. 注释和代码隔开一定距离。
    x = x + 1  # 这样的注释略近
    x = x + 1       # 更好的注释位置
    
    1. 给外部可访问的函数或方法添加文档注释。描述其功能、参数、返回值及可能的异常等信息。例如:
    def get_lines(name, lines):
        """Return lines that begin with name.
        Lines are expected to look like:
            name: space separated values
        Args:
            name: string, parameter name.
            lines: iterable of string, lines in the file.
        Returns:
            List of values in the lines that match.
        """
        retval = []
        matches = itertools.ifilter(lambda x: x.startswith(name + ":"), lines)
        for line in matches:
            retval.extend(line[len(name) + 1 :].split())
        return retval
    
    1. 建议在文件头包含copyright声明、模块描述,有必要的话还可以加入作者信息。例如:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    #
    # Copyright 2014 Google Inc. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not ...
    
    1. 更新代码之后,注释要和代码同步更新。在实际工作中,很容易发生代码不断迭代,而忘了更新注释的情况,需要加以小心。

    适当添加空行,使代码布局更优雅、合理

    1. 在一组代码表达完一个完整思路之后,应用空行进行分隔。
    2. 保持上下文语义的易理解性。 当一个函数调用另一个函数时,尽量将它们放在一起,一般调用者在上,被调用者在下。
    def A():
        B()
    
    def B():
        pass
    
    1. 空格的使用
      • 二元运算符(赋值=,比较(==, <, >, !=, <=, >=, in, not in, is, is not),布尔运算(and, or, not))的左右两边。如x == 1
      • 逗号和分号前不要使用空格。
      • 函数名和左括号之间、序列索引操作时序列名和[]之间不需要空格,函数的参数=两侧不需要空格。

    编写函数的4个原则

    1. 函数设计尽量短小,嵌套层次不宜过深。
    2. 函数声明需合理、简单、易于使用。
    3. 函数参数设计时,应考虑向下兼容(兼容之前的版本)。
    4. 一个函数只做一件事(解耦合)。

    • 参考:《编写高质量代码——改善Python程序的91个建议》

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 相关阅读:
    高质量动漫实时画质增强器Anime4K在mpv上的配置
    grep中正则表达式使用尖括号表示一个单词
    虚拟机复制的linux无法联网,解决Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.
    Linux将动态IP改为静态IP
    回车、换行的区别
    栈的链接存储
    栈的顺序存储
    冒泡排序
    插入排序
    双向循环链表
  • 原文地址:https://www.cnblogs.com/monteyang/p/12690523.html
Copyright © 2020-2023  润新知