Python程序设计【语言规范】

Python程序设计【语言规范】

【课程性质:大数据分析】

1. 实验目标

2. 适用的对象

Python基础
学习对象:本科学生、研究生、人工智能、算法相关研究者、开发者
大数据分析

实践学习部分

1. 语句

通常每个语句应该独占一行
不过, 如果测试结果与测试语句在一行放得下, 你也可以将它们放在同一行.
如果是if语句, 只有在没有else时才能这样做.

   # Yes:
   if foo: bar(foo)
   # NO:
if foo: bar(foo)

else: baz(foo)

2. 冒号与缩进

Python中使用缩进来区分代码的逻辑性。
冒号:表示一段代码的开始。

使用 4 个空格进行缩进,尽量不要用Tab,更不能混合使用Tap和空格
我是曾经的 Tab 党,转为空格党的理由只有一个,就是 Tab 无法做到行内行末代码或注释的对齐。很多用tab的代码,在网页上查看对齐就乱了
而空格啥都可以。任何人用任何编辑器查看代码都是对齐的,包括网页上查看。

          if 2 > 1:
               print(2)
          else:
              print(1)



def func():
    print("海豚大数据及人工智能实验室")
    print("海豚大数据及人工智能实验室")
    print("海豚大数据及人工智能实验室")

3. 分号

不要在行尾加分号, 也不要用分号将两条命令放在同一行。

  a=1
  b=2
  c=3

变量定义不需要指定类型(动态语言)

禁止复合语句,即一行中包含多个语句:

  # yes

      do_first()
      d _second()
      do_third()

 # no

      do_first();do_second();do_third();

      if/for/while一定要换行:

# yes

    if foo == 'blah':
        do_blah_thing()

# no

     if foo == 'blah': do_blash_thing()

a=4;b=5;c=6

4. 括号

宁缺毋滥的使用括号

除非是用于实现行连接, 否则不要在返回语句或条件语句中使用括号.

       # Yes:

                if foo:
                   bar()

while x:
    x = bar()
    x += 1

if x and y:
    bar()

if not x:
    bar()

return foo

#No:

    if (x):
       bar()

if not(x):
   bar()

return (foo)

x = [1, 2, 3]
y = (1, 2, 3)
z = {“a”:1, “b”:2, “c”:3}

5. 行宽与续行符

每行代码尽量不超过 80 个字符
理由:
这在查看 side-by-side 的 diff 时很有帮助
方便在控制台下查看代码
太长可能是设计有缺陷

反斜杠\

a = 1+2+3+4+5+ \
6+7+8+9+10

6. 换行

Python 支持括号内的换行。这时有两种情况。

第二行缩进到括号的起始处

     foo = long_function_name(var_one, var_two,

                       var_three, var_four)

第二行缩进 4 个空格,适用于起始括号就换行的情形

def long_function_name(

      var_one, var_two, var_three,
      var_four):
      print(var_one)

使用反斜杠\换行,二元运算符+ .等应出现在行末;长字符串也可以用此法换行

session.query(MyTable).\

           filter_by(id=1).\
           one()

print ('Hello, '\

        '%s %s!' %\
        ('Harry', 'Potter'))

7. 引号

Python支持 单引号、双引号、三单引号、三双引号

简单说,自然语言使用双引号,机器标示使用单引号,因此 代码里 多数应该使用 单引号

自然语言 使用双引号 "..." 例如错误信息;"输入类型错误"

机器标识 使用单引号 '...' 例如 dict 里的 key

正则表达式 使用原生的双引号 r"..."

文档字符 使用三个双引号 """......"""

(单引号、双引号)与(三单引号、三双引号)的用法比较 :

1). (单引号、双引号)表示多行时需要添加换行符\n。

2). (三单引号、三双引号)表示多行时无需使用任何多余字符

3). (三单引号、三双引号)中可直接使用(单引号、双引号)而无需使用反斜杠\进行转义

 x = 'a'
 y = "b"
 z = """
 123
 456
 """
 z

8. 空格

在二元运算符两边各空一格

[=,-,+=,==,>,in,is not, and]:

# yes

    i = i + 1
    submitted += 1
    x = x * 2 - 1
    hypot2 = x * x + y * y
    c = (a + b) * (a - b)

# no

i=i+1
submitted +=1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

函数的参数列表中,逗号之后要有空格

# yes

    def complex(real, imag):
        pass

# no

       def complex(real,imag):
           pass

函数的参数列表中,默认值等号两边不要添加空格

# yes

def complex(real, imag=0.0):
    pass

# no

def complex(real, imag = 0.0):
    pass

左括号之后,右括号之前不要加多余的空格

# yes

    spam(ham[1], {eggs: 2})

# no

   spam( ham[1], { eggs : 2 } )

字典对象的左括号之前不要多余的空格

# yes

    dict['key'] = list[index]

# no

   dict ['key'] = list [index]

不要为对齐赋值语句而使用的额外空格

# yes

    x = 1
    y = 2
    long_variable = 3

# no

     x             = 1
     y             = 2
     long_variable = 3

9. 注释

块注释

"#" 号后空一格,段落间用空行分开(同样需要“#”号)

   # 块注释
   # 块注释
   # 
   # 块注释
   # 块注释

行注释

至少使用两个空格和语句分开,使用有意义的注释

# yes
x = x + 1  # 边框加粗一个像素

# no
x = x + 1 # x 加 1

docstring

docstring 最其本的两点:

所有的公共模块、函数、类、方法,都应该写 docstring。

私有方法不一定需要,但应该在 def 后提供一个块注释来说明。

docstring 的结束"""应该独占一行,除非此 docstring 只有一行。

"""

  Return a foobar
  Optional plotz says to frobnicate the bizbaz first.

"""

"""Oneline docstring"""

10. 命名规范

应避免使用小写字母 l(L),大写字母 O(o) 或 I(i) 单独作为一个变量的名称,以区分数字 1 和 0
包和模块使用全小写命名,尽量不要使用下划线
类名使用 CamelCase 命名风格,内部类可用一个下划线开头
函数使用下划线分隔的小写命名
当参数名称和 Python 保留字冲突,可在最后添加一个下划线,而不是使用缩写或自造的词
常量使用以下划线分隔的大写命名
''单下划线开头:弱“内部使用”标识,如:”from M import *”,将不导入所有以下划线开头的对象,包括包、模块、成员 , 单下划线结尾:只是为了避免与 python 关键字的命名冲突

'__'双下划线开头:模块内的成员,表示私有成员,外部无法直接调用

MAX_OVERFLOW = 100

Class FooBar:

    def foo_bar(self, print_):
          print(print_)

应该避免的名称

    单字符名称, 除了计数器和迭代器.
    包/模块名中的连字符(-)
    双下划线开头并结尾的名称(Python保留, 例如init)

Python之父Guido推荐的规范
在这里插入图片描述

11. import 语句

import 语句应该分行书写

   #yes

       import os
       import sys

# no

    import sys,os

# yes

   from subprocess import Popen, PIPE

import 语句应该使用 absolute import

# yes

from foo.bar import Bar

# no

from ..bar import Bar

import 语句应该放在文件头部,置于模块说明及 docstring 之后,于全局变量之前;

import 语句应该按照顺序排列,每组之间用空行分隔

    import os
    import sys
    import msgpack
    import zmq
    import foo

导入其他模块的类定义时,可以使用相对导入

from myclass import MyClass

如果发生命名冲突,则可使用命名空间

import bar

import foo.bar

bar.Bar()

foo.bar.Bar()

12. Google 开源项目风格指南-Python语言规范

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值