ホームページ  >  記事  >  バックエンド開発  >  Pythonコーディング標準の知識ポイントをまとめたもの

Pythonコーディング標準の知識ポイントをまとめたもの

WBOY
WBOY転載
2022-07-08 14:37:322425ブラウズ

この記事では、Python に関する関連知識を提供します。主にコーディング標準に関連する問題を整理します。Python コードをうまく書きたい場合は、Python 関連のコーディング標準を理解する必要があります。のコードは、対応する機能を実現できるだけでなく、シンプルで読みやすく、明確なロジックを備えています。一緒に見てみましょう。皆さんのお役に立てれば幸いです。

Pythonコーディング標準の知識ポイントをまとめたもの

[関連する推奨事項: Python3 ビデオ チュートリアル ]

Python コードをうまく書きたい場合は、Python 関連を理解する必要がありますこのおかげで、書かれたコードは対応する機能を実現できるだけでなく、シンプルで読みやすく、明確なロジックを持つことができます。スキル ツリーのこのセクションでは主に、対応する Python コーディング仕様を共有しています。Python を学習している友人はよく読んでください。これは間違いなく Python コードの作成を向上させます。 ! !

1 コード エンコード形式

  • 一般的に、スクリプト内でエンコード形式を宣言する必要があります。
  • 国際規約によれば、ファイルのエンコーディングと Python のエンコーディング形式はすべて utf-8 です。例: Python コードの先頭に、次のコードを均一に追加します:
# -- coding: utf-8 --
  • Python ソース コード ファイルでエンコード形式が宣言されていない場合、Python インタープリタは ASCII エンコードを使用します。デフォルトでは。ただし、非 ASCII 文字が含まれる場合、Python インタプリタはエラーを報告するため、非 ASCII 文字を含む文字列に u プレフィックス を追加してください。
  • Python エンコードの問題がある場合は、次の操作に従って問題の解決を試みることができます。
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

2 Semicolon

セミコロンを追加しないでください。いいえ、両方のコマンドを同じ行に入力してください。

最大長は 3 行です。

1 行あたり 80 文字以内です。

次の状況を除きます。

  1. 長いインポート モジュール ステートメント
  2. コメント内の URL

行の接続にバックスラッシュを使用しないでください。

Python は、括弧、角括弧、中括弧で囲まれた行を暗黙的に接続します。

括弧、角括弧、または中括弧内の式は、バックスラッシュを使用せずに複数の物理行に分割できます。例:

month_names = ['Januari', 'Februari', 'Maart',      # These are the
               'April',   'Mei',      'Juni',       # Dutch names
               'Juli',    'Augustus', 'September',  # for the months
               'Oktober', 'November', 'December']   # of the year

暗黙的な行の結合はコメント化できます。後続の行のインデントはプログラムの構造には影響しません。後続の行を空行にすることもできます。

必要に応じて、式の周囲に括弧のペアを追加できます。

テキスト文字列が 1 行に収まらない場合は、括弧を使用して暗黙的な行連結を実装できます

x = ('这是一个非常长非常长非常长非常长 '
     '非常长非常长非常长非常长非常长非常长的字符串')

4 インデントの規則

  • Python ではコード インデントが使用されます。コロンとコロン (:) を使用して、コード ブロック間のレベルを区別します。
  • Python では、クラス定義、関数定義、フロー制御ステートメント、例外処理ステートメントなどについて、行末のコロンと次の行のインデントが次のコード ブロックの始まりを示します。 、インデントの終わり このコード ブロックの終わりを示します。
  • Python でコードのインデントを実装するには、スペースまたは Tab キーを使用できます。ただし、スペースを手動で入力するか、Tab キーを使用するかに関係なく、通常は 4 つのスペースの長さがインデント量として使用されます (デフォルトでは、Tab キーは 4 つのスペースを表します)。
  • 初心者は、この方法で Python のインデント ルールを理解できます。Python では、同じスコープに属するコードの各行は同じインデント量を持つ必要がありますが、特定のインデント量に関する厳密なルールはありません。

Emacs の Python モードのデフォルト値であるインデント レベルごとに 4 つのスペースを使用することをお勧めします。 タブを使用したり、タブとスペースを混在させたりしないでください

正しいコード例:

if a==0:
    print("正确")        # 缩进4个空白占位
else:                    # 与if对齐
    print("错误")        # 缩进4个空白占位

或者

# 4 个空格缩进,第一行不需要
foo = long_function_name(
    var_one, var_two, var_three,
    var_four)

間違ったコード例:

if a==0:
    print("正确") 
else:              
    print("错误")   
 print("end")       # 错误的是这行代码前面加了一个空格

或者

# 2 个空格是禁止的
foo = long_function_name(
  var_one, var_two, var_three,
  var_four)

5 コメント

  • Python ではコメントに # を使用します。# 記号の後にはスペースが必要です。
  • コードの中で最もコメントを必要とする技術的な部分は次のとおりです: 複雑な操作の場合は、操作を開始する前に数行のコメントを記述する必要があります。一目でわかりにくいコードの場合は、コメントを追加する必要があります。行末 注。
  • 読みやすさを向上させるために、コメントとコードの間に一定の距離を保ちます。コメントはコードから少なくとも 2 スペース離す必要があります。コードを記述する前に、ブロック コメントの後にさらに数行の空白行を残すことをお勧めします。
  • コードが変更されると、対応するコメントが最初に更新されます。
  • コメントが語句または文の場合、小文字で始まる識別子でない限り、最初の単語は大文字にする必要があります (識別子の大文字と小文字は絶対に変更しないでください)。
  • コメントが短い場合は、末尾のピリオドを省略できます。ブロック コメントは通常、完全な文の 1 つ以上の段落で構成され、各文はピリオドで終わります。
  • 文末にはスペースを 2 つ使用してください。

Python には 3 つの形式のコメントがあります: 行コメント、ブロック コメント、ドキュメント コメント

行コメント: コメントはコード自体ではなく、その動作を説明する必要があります

  • 有节制地使用行内注释
  • 行内注释是与代码语句同行的注释
  • 行内注释和代码至少要有两个空格分隔
  • 注释由#和一个空格开始。
n = input()
m = input()
t = n / 2     # t是n的一半

# 循环,条件为t*m/n 小于n
while (t * m / (n + 1) < n):
    t = 0.5 * m + n / 2     # 重新计算t值
print(t)

块注释

  • 块注释通常适用于跟随它们的某些(或全部)代码,并缩进到与代码相同的级别
  • 块注释的每一行开头使用一个 # 和一个空格(除非块注释内部缩进文本)。
  • 块注释内部的段落通常只有一个 # 的空行分隔。
def FuncName(parameter1,parameter2):

"""

描述函数要做的事情

:param parameter1: 参数一描述(类型、用途等)

:param parameter2: 参数二描述

:return: 返回值描述

"""
# We use a weighted dictionary search to find out where i is in
# the array.  We extrapolate position based on the largest num
# in the array and the array size and then do binary search to
# get the exact number.

if i & (i-1) == 0:        # true if i is a power of 2

文档注释

  • 要为所有的公共模块,函数,类和方法编写文档说明
  • 非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后
  • 多行文档注释使用的结尾三引号应该是自成一行
class SampleClass(object):
    """Summary of class here.

    Longer class information....
    Longer class information....

    Attributes:
        likes_spam: A boolean indicating if we like SPAM or not.
        eggs: An integer count of the eggs we have laid.
    """

    def __init__(self, likes_spam=False):
        """Inits SampleClass with blah."""
        self.likes_spam = likes_spam
        self.eggs = 0

    def public_method(self):
        """Performs operation blah."""

6 空行

  • 顶层函数和类定义,前后用两个空行隔开
  • 编码格式声明、模块导入、常量和全局变量声明、顶级定义和执行代码之间空两行
  • 类里面方法定义用一个空行隔开
  • 在函数或方法内部,可以在必要的地方空一行以增强节奏感,但应避免连续空行
class Class01:
    pass
 
 
class Class02:
    def function_01(self):
        pass
 
    def function_02(self):
        pass

使用必要的空行可以增加代码的可读性,通常在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行,另外在用于分隔某些功能的位置也可以空一行。

7 制表符还是空格

  • 不要混用制表符和空格,因为如果混用了,虽然在编辑环境中显示两条语句为同一缩进层次,但因为制表符和空格的不同会导致 Python 解释为两个不同的层次。
  • 在调用 Python 命令行解释器时使用 -t 选项,可对代码中不合法的混合制表符和空格发出警告,使用 -tt 时警告将变成错误,这些选项是被高度推荐的。但是强烈推荐仅使用空格而不是制表符。

空格使用规则:

  • 在二元运算符两边各空一格,比如赋值(=)、比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔(and, or, not),算术操作符两边的空格可灵活使用,但两侧务必要保持一致
  • 不要在逗号、分号、冒号前面加空格,但应该在它们后面加(除非在行尾)
  • 函数的参数列表中,逗号之后要有空格
  • 函数的参数列表中,默认值等号两边不要添加空格
  • 左括号之后,右括号之前不要加添加空格
  • 参数列表, 索引或切片的左括号前不应加空格
  • 当'='用于指示关键字参数或默认参数值时,不要在其两侧使用空格
  • 正确示例代码:

    spam(ham[1], {eggs: 2}, [])
    
    if x == 4:
        print x, y
    x, y = y, x
    
    dict['key'] = list[index]
    
    def complex(real, imag=0.0): return magic(r=real, i=imag)

    错误示例代码:

    spam( ham[ 1 ] , { eggs: 2 } , [ ] )
    
    if x == 4 :
        print x , y
    x , y = y , x
    
    dict ['key'] = list [index]
    
    def complex(real, imag = 0.0): return magic(r = real, i = imag)

    8 命名规范

    模块名命名

    • 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)
    # 正确
    
    import decoder
    
    import html_parser
    
    # 不推荐
    
    import Decoder

    变量命名

    • 不要使用字母I (小写的L), O (大写的O), I (大写的I)作为单字符的变量名。在有些字体里面,这些字符无法与数字0和1区分。如果想用I, 可使用L代替。
    • 变量名尽量小写, 如有多个单词,用下划线隔开。
    count = 0
    this_is_var = 0

    常量或者全局变量命名

    • 全部大写,如有多个单词,用下划线隔开
    • 全⼤写+下划线式驼峰
    MAX_CLIENT = 100

    函数命名

    • 函数名应该小写,如有多个单词,用下划线隔开。
    • 大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用,保持向后兼容。
    • 私有函数在函数前加一个下划线_
    def run():
        pass
    
    def run_with_env():
        pass
    
    
    class Person():
        def _private_func():
            pass

    类命名

    • 类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。
    • 在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。
    • 对于内置的变量命名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量。
    class Farm():
        pass
    
    class AnimalFarm(Farm):
        pass
    
    class _PrivateFarm(Farm):
        pass

    类里面函数和方法参数

    • 始终要将self作为实例方法的第一个参数。
    • 始终要将cls作为类方法的第一个参数。
    • 如果函数的参数名和已有关键字冲突,在最后加大意下划线比缩写或者随意拼写更好。因此class_比clss更好。

    特别注意:

    • 不要中英文混编
    • 不要有a、b、c这种没有意义的命名
    • 不要怕名字长就随便缩写,比如person_info 缩写成pi
    • 不要用大小写区分变量类型,比如a是int类型,A是String类型
    • 不要使用容易引起混淆的变量名
    • bool变量⼀般加上前缀 is_ 如:is_success
    • 变量名不要用系统关键字,如 dir type str等等

    以下用下画线作前导或结尾的特殊形式是被公认的:

    • _single_leading_underscore(以一个下画线作前导):例如,“from M import *”不会导入以下画线开头的对象。
    • single_trailing_underscore_(以一个下画线结尾):用于避免与 Python 关键词的冲突,例如“Tkinter.Toplevel(master, class_='ClassName')”。
    • __double_leading_underscore (双下画线):从 Python 1.4 起为类私有名。
    • __double_leading_and_trailing_underscore__:特殊的(magic) 对象或属性,存在于
      用户控制的(user-controlled)名字空间,例如:__init__、__import__ 或 __file__。

    9 引号用法规则

    • 自然语言使用双引号
    • 机器标识使用单引号
    • 正则表达式使用双引号
    • 文档字符串 (docstring) 使用三个双引号

    字符串引号规则:

    • 单引号和双引号字符串是相同的。当一个字符串中包含单引号或者双引号字符串的时候,使用和最外层不同的符号来避免使用反斜杠,从而提高可读性。
    • 在同一个文件中,保持使用字符串引号的一致性。在字符串内可以使用另外一种引号,以避免在字符串中使用。

    正确使用示例:

    Tim('Why are you hiding your eyes?')
    Bob("I'm scared of lint errors.")
    Juy('"Good!" thought a happy Python reviewer.')
    • 当且仅当代码中使用单引号'来引用字符串时,才可能会使用三重'''为非文档字符串的多行字符串来标识引用
    • 文档字符串必须使用三重双引号"""

    10 模块导入规则

    • 导入应该放在文件顶部,位于模块注释和文档字符串之后,模块全局变量和常量之前。
    • 导入应该按照从最通用到最不通用的顺序分组:标准库导入、第三方库导入、应用程序指定导入,分组之间空一行。
    •  模块名称要短,使用小写,并避免使用特殊符号, 比如点和问号。
    • 尽量保持模块名简单,以无需分开单词最佳(不推荐在两个单词之间使用下划线)。
    • 每个导入应该独占一行。

    正确使用例子:

    import os
    import numpy
    import sys
    
    from types import StringType, ListType

    错误使用例子:

    import os, numpy, sys
    • 从一个包含类的模块中导入类时,通常可以写成这样:
    from MyClass import MyClass 
    from foo.bar.YourClass import YourClass

    模块导入建议

    示例 评价
    from modu import * 差, 不清楚具体从模块中导入了哪些内容
    from modu import sqrt 稍好

    import modu

    import modu.sqrt

    最佳 , 调用的时候直接使用modu.sqrt能比较清楚的知道当前方法属于哪个模块

    import os

    import sys

    推荐

    import os, sys

    不推荐
    from subprocess import Popen, PIPE 推荐

    11 Main

    主功能应该放在一个main()函数中。

    在Python中,pydoc以及单元测试要求模块必须是可导入的。代码应该在执行主程序前总是检查 if __name__ == '__main__', 这样当模块被导入时主程序就不会被执行。

    def main():
          ...
    
    if __name__ == '__main__':
        main()

    12 函数设计规范

    • 函数设计的主要目标就是最大化代码重用和最小化代码冗余。精心设计的函数不仅可以提高程序的健壮性,还可以增强可读性、减少维护成本。
    • 函数设计要尽量短小,嵌套层次不宜过深。 所谓短小, 就是尽量避免过长函数, 因为这样不需要上下拉动滚动条就能获得整体感观, 而不是来回翻动屏幕去寻找某个变量或者某条逻辑判断等。 函数中需要用到 if、 elif、 while 、 for 等循环语句的地方,尽量不要嵌套过深,最好能控制在3层以内。不然有时候为了弄清楚哪段代码属于内部嵌套, 哪段属于中间层次的嵌套, 哪段属于更外一层的嵌套所花费的时间比读代码细节所用时间更多。
    • 尽可能通过参数接受输入,以及通过return产生输出以保证函数的独立性。
    • 尽量减少使用全局变量进行函数间通信。
    • 不要在函数中直接修改可变类型的参数。
    • 函数申明应该做到合理、 简单、 易于使用。 除了函数名能够正确反映其大体功能外, 参数的设计也应该简洁明了, 参数个数不宜太多。 参数太多带来的弊端是: 调用者需要花费更多的时间去理解每个参数的意思,测试的时候测试用例编写的难度也会加大。
    • 函数参数设计应该考虑向下兼容。

    13 版本注记

    如果要将 RCS 或 CVS 的杂项包含在你的源文件中,按如下格式操作:

    __version__ = "$Revision: 1.4 $" 
    # $Source: E:/cvsroot/python_doc/pep8.txt,v $

    对于 CVS 的服务器工作标记更应该在代码段中明确出它的使用说明,如在文档最开始的版权声明后应加入如下版本标记:

    # 文件:$id$ 
    # 版本:$Revision$

    这样的标记在提交给配置管理服务器后,会自动适配成为相应的字符串,如:

    # 文件:$Id: ussp.py,v 1.22 2004/07/21 04:47:41 hd Exp $ 
    # 版本:$Revision: 1.4 $

    这些应该包含在模块的文档字符串之后,所有代码之前,上下用一个空行分割。

    【相关推荐:Python3视频教程

    以上がPythonコーディング標準の知識ポイントをまとめたものの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。