📜  PEP 8: Python中的编码风格指南

📅  最后修改于: 2022-05-13 01:54:53.239000             🧑  作者: Mango

PEP 8: Python中的编码风格指南

事实上,编码和应用逻辑是任何编程语言的基础,但还有一个因素是每个编码人员在编码时必须牢记的,那就是编码风格。牢记这一点, Python保持了严格的脚本顺序和格式。遵循这一点有时是强制性的,并且对用户的理解有很大帮助。让其他人更容易阅读代码总是一个好主意,采用一种好的编码风格对此有很大帮助。

对于Python来说, PEP 8已经成为大多数项目所遵循的风格指南;它促进了一种非常易读和赏心悦目的编码风格。每个Python开发人员都应该在某个时候阅读它;以下是为您提取的最重要的几点:

1. 使用 4 空格缩进,没有制表符。
例子:

# Aligned with opening delimiter.
grow = function_name(variable_one, variable_two,
                     variable_three, variable_four)
# First line contains no argument. Second line onwards
# more indentation included to distinguish this from 
# the rest.
def function_name(
        variable_one, variable_two, variable_three,
        variable_four):
    print(variable_one)

4 空格规则并不总是强制性的,并且可以被否决以用于续行。

2. 使用文档字符串:在Python中可以使用单行和多行文档字符串。但是,单行注释适合一行,两种情况下都使用三引号。这些用于定义特定程序或定义特定函数。
例子:

def exam():
    """This is single line docstring"""

    """This is
    a
    multiline comment"""

3. 换行,使它们不超过 79 个字符: Python标准库是保守的,要求将行限制为 79 个字符。可以使用圆括号、方括号和大括号来换行。应该优先使用它们而不是反斜杠。
例子:

with open('/path/from/where/you/want/to/read/file') as file_one, \
     open('/path/where/you/want/the/file/to/be/written', 'w') as file_two:
    file_two.write(file_one.read())

4. 使用定期和更新的评论对编码人员和用户都很有价值:从程序和用户的角度来看,如果遵循这些类型和条件,也会有很大的帮助。评论应该形成完整的句子。如果评论是一个完整的句子,它的第一个单词应该大写,除非它是一个以小写字母开头的标识符。在简短的评论中,末尾的句点可以省略。在块注释中,有多个段落,并且每个句子必须以句点结尾。块注释和内联注释可以写后跟一个“#”。
内联注释示例:

geek = geek + 1                 # Increment

5.尾随逗号的使用:这不是强制性的,除非在制作元组时。
例子:

tup = ("geek",)

5.使用 Python 的默认UTF-8ASCII编码,而不是任何花哨的编码,如果它适用于国际环境。

6. 在运算符周围和逗号后使用空格,但不要直接在括号结构内:

a = f(1, 2) + g(3, 4)

7. 命名约定:为了使程序不那么复杂和更具可读性,应该遵循一些命名约定。同时, Python中的命名约定有点混乱,但这里有几个可以轻松遵循的约定。
遵循一个最重要的原则,即作为 API 的公共部分对用户可见的名称应该遵循反映使用而不是实现的约定。
以下是其他一些命名约定:

b (single lowercase letter)

B (single upper case letter)

lowercase

lower_case_with_underscores

UPPERCASE

UPPER_CASE_WITH_UNDERSCORES

CapitalizedWords (or CamelCase). This is also sometimes known as StudlyCaps.
Note: While using abbreviations in CapWords, capitalize all the letters 
of the abbreviation. Thus HTTPServerError is better than HttpServerError.

mixedCase (differs from CapitalizedWords by initial lowercase character!)

Capitalized_Words_With_Underscores

除了这几个前导或尾随下划线之外,还考虑了这些下划线。
例子:
single_leading_underscore:弱“内部使用”指标。例如 from M import * 不会导入名称以下划线开头的对象。

single_trailing_underscore_:用于避免与Python关键字冲突。
例子:

Tkinter.Toplevel(master, class_='ClassName')

__double_leading_underscore:命名类属性时,调用名称修饰。
(在 FooBar 类中,__boo 变为 _FooBar__boo;)。

__double_leading_and_trailing_underscore__:存在于用户控制的命名空间中的“神奇”对象或属性。例如__init__、__import__ 或 __file__ 。仅按文档说明使用它们。

8. 不应该用于标识符的字符: 'l'(小写字母 el)、'O'(大写字母 oh)或 'I'(大写字母 eye)作为单字符变量名称,因为这些类似于数字一和零。

9. 如果说不同语言的人阅读或维护代码的可能性很小,就不要在标识符中使用非 ASCII字符

10. 统一命名你的类和函数:
惯例是使用CamelCase命名类,使用lower_case_with_underscores命名函数和方法。始终使用self作为第一个方法参数的名称。

11. 虽然方法函数的命名总是使用self作为实例方法的第一个参数,而使用cls作为类方法的第一个参数。如果函数参数名称与保留字匹配,则可以用逗号结尾。例如,class_

你可以参考这个简单的程序来了解如何编写一个可以理解的代码:

# Python program to find the
# factorial of a number provided by the user. 
  
# change the value for a different result 
num = 7
  
# uncomment to take input from the user 
#num = int(input("Enter a number: ")) 
  
factorial = 1
  
# check if the number is negative, positive or zero 
if num < 0: 
    print("Sorry, factorial does not exist for negative numbers") 
elif num == 0: 
    print("The factorial of 0 is 1") 
else: 
    for i in range(1,num + 1): 
        factorial = factorial*i 
          
print("The factorial of",num,"is",factorial) 

输出:

The factorial of 7 is 5040