python编码格式有哪些_python代码的格式指南

一、缩进

延续行连接各部分可以直接使用Python大括号、中括号以及小括号里面的垂直式隐线,或者使用悬挂缩进。当使用悬挂缩进时需要考虑以下问题:第一行不该有参数,更远的缩进使用时可以清晰的区分它本身是一个延续行。

正确:

# Aligned with opening delimiter.

foo = long_function_name(var_one, var_two,

var_three, var_four)

# Add 4 spaces (an extra level of indentation) to distinguish arguments from the rest.

def long_function_name(

var_one, var_two, var_three,

var_four):

print(var_one)

# Hanging indents should add a level.

foo = long_function_name(

var_one, var_two,

var_three, var_four)

错误:

# Arguments on first line forbidden when not using vertical alignment.

foo = long_function_name(var_one, var_two,

var_three, var_four)

# Further indentation required as indentation is not distinguishable.

def long_function_name(

var_one, var_two, var_three,

var_four):

print(var_one)

可选择:

# Hanging indents *may* be indented to other than 4 spaces.

foo = long_function_name(

var_one, var_two,

var_three, var_four)

当if-statement条件部分足够长需要写成多行时,由两个字符(if)加一个空格,以及一个开的小括号组成的4位缩进的多行条件句是没有意义的。这会跟if执行句里面的缩进成分产生视觉矛盾,因为它们同样缩进4位。本PEP没有在如何区分条件句与执行句摆出明确的态度。该情况下可接受的选择包含但不仅限于:

# No extra indentation.

if (this_is_one_thing and

that_is_another_thing):

do_something()

# Add a comment, which will provide some distinction in editors

# supporting syntax highlighting.

if (this_is_one_thing and

that_is_another_thing):

# Since both conditions are true, we can frobnicate.

do_something()

# Add some extra indentation on the conditional continuation line.

if (this_is_one_thing

and that_is_another_thing):

do_something()

多行结构的闭合括号可以在第一个非空格字符下排列,

my_list = [

1, 2, 3,

4, 5, 6,

]

result = some_function_that_takes_arguments(

'a', 'b', 'c',

'd', 'e', 'f',

)

或者在开始多行结构的第一个字符排列,

my_list = [

1, 2, 3,

4, 5, 6,

]

result = some_function_that_takes_arguments(

'a', 'b', 'c',

'd', 'e', 'f',

)

二、最大行长

Python标准图书库是保守的,需要限定每行字符为79个。

连接长代码行的倾向性用法是使用Python在括号中的隐含行延续。长代码行可以打断为多行通过在括号里包装表达句。比较好的做法是使用反斜杠作为行延续。

反斜杆很多情况下仍旧是适用的。比如,长而多的with语句不能使用隐含延续,而反斜杆可以使用。

with open('/path/to/some/file/you/want/to/read') as file_1, \

open('/path/to/some/file/being/written', 'w') as file_2:

file_2.write(file_1.read())

三、断行需要在二元运算符前还是后

很长一段时间,推荐的方式是在二元运算符后面断行。但是这会从两方面损害可读性:运算符在屏幕的不同列零散分布,并且每个运算符与操作内容相分离而放置在前一行末尾。这里,眼睛不得不额外费点功夫看看哪些项目被加上哪些被减去。

# No: operators sit far away from their operands

income = (gross_wages +

taxable_interest +

(dividends - qualified_dividends) -

ira_deduction -

student_loan_interest)

为了解决这个可读性问题,数学家与他们的编辑者依据相反的惯例。Donald Knuth在他的系列“Computers and Type setting”阐述了传统规则:“尽管在段落里面的公式总是在二元运算符以及关系后面打断换行,展示的公式总是在二元运算符前面打断换行。”

依据数学的传统惯例通常可以形成更有可读性的代码。

# Yes: easy to match operators with operands

income = (gross_wages

+ taxable_interest

+ (dividends - qualified_dividends)

- ira_deduction

- student_loan_interest)

在Python代码中,不管是在二元运算符前面还是后面打断换行都是允许的,只要惯例在局部保持一致性,对于新的代码,Knuth的风格值得推荐。

四、表达式语句中的空白

避免在以下情况出现额外的空格。

在括号里紧跟着

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

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

在尾随逗号与闭括号之间

Yes: foo = (0,)

No: bar = (0, )

在逗号,分号或者冒号前

Yes: if x == 4: print x, y; x, y = y, x

No: if x == 4 : print x , y ; x , y = y , x

但是,在片段里面,冒号充当二元运算符,应该在两边保持等量空格(把它当做运算符最低优先级)。在延伸的片段中,冒号一定要有等量的空格。除非当一个片段的参数省略了,空格可以省略。

正确:

ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]

ham[lower:upper], ham[lower:upper:], ham[lower::step]

ham[lower+offset : upper+offset]

ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]

ham[lower + offset : upper + offset]

错误:

ham[lower + offset:upper + offset]

ham[1: 9], ham[1 :9], ham[1:9 :3]

ham[lower : : upper]

ham[ : upper]

End.

来源:数据人网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值