python 建议使用什么方法来中断长if语句?(W504在二元运算符后换行)

41ik7eoe  于 2022-12-17  发布在  Python
关注(0)|答案(5)|浏览(108)

当前推荐的用“and”和“or”操作符打断一长行if语句的方法是什么?

第一个选项

使用下面的样式(来自PEP8)和flake8,我收到警告:W504二元运算符后的换行符:

if (this_is_one_thing and
    that_is_another_thing):
    do_something()

第二个选项

if (this_is_one_thing
    and that_is_another_thing):
    do_something()

现在,我在二元运算符之前得到了W503换行符的警告,第二个似乎与PEP8的建议一致
我试着找到答案,但我仍然不确定。我想也许使用第二个选项和禁用W503警告将是一个方法来处理这个问题?

iibxawm4

iibxawm41#

如果查询documentation on flake 8,我们会看到:

反模式

注意:尽管是在反模式部分,这很快就会被认为是最佳实践。

income = (gross_wages
          + taxable_interest)

最佳做法

注意:尽管在最佳实践部分中,这个很快就会被认为是反模式

income = (gross_wages +
          taxable_interest)

因此,在二元运算符 * 之前 * 换行将被视为最佳做法。
The documentation for W504,作为最佳实践,在新生产线之前建议操作员,但没有给出注解:

反模式

income = (gross_wages +
          taxable_interest)

最佳做法

income = (gross_wages
          + taxable_interest)
gudnpqoy

gudnpqoy2#

如有疑问,请询问Black

if (                                                           
    this_is_one_thing
    and that_is_another_thing
):                                                             
    do_something()

很长一段时间以来,PEP-8都建议在二元运算符之后中断 *,但是他们“最近”切换到了Donald-Knuth-approved在二元运算符之前中断的风格。

bfhwhh0e

bfhwhh0e3#

Flake8是Python的一个lint,并且the full list of errors对于查找每个特定错误的反模式和最佳实践非常有用。

1bqhqjot

1bqhqjot4#

您可以使用allany来代替andor

if all((
        this_is_one_thing,
        that_is_another_thing)):
    do_something()
ppcbkaq5

ppcbkaq55#

通常情况下,我使用反斜线来表示一个if语句,该语句在多行中有多个条件,如下所示,因为它可以正常工作,没有任何错误和警告,而且简单,可读性很好:

exam1 = 70
exam2 = 60
exam3 = 50
                                   # ↓ Here
if (100 >= exam1 and exam1 >= 60) or \
   (100 >= exam2 and exam2 >= 60) or \
   (100 >= exam3 and exam3 >= 60): # ↑ Here
    print("You passed!!")

输出:

You passed!!

相关问题