Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于这个长Python行,正确的PEP8实践是什么?_Python_Python 2.7_Pep8 - Fatal编程技术网

对于这个长Python行,正确的PEP8实践是什么?

对于这个长Python行,正确的PEP8实践是什么?,python,python-2.7,pep8,Python,Python 2.7,Pep8,我应该如何打破这条线,使其符合PEP8 assert (sum(map(lambda x: len(x), (activities,apps,classes,users,verbs))) == Object.query .filter(Object.status != ObjectStatusChoices.DELETED) .count()) 首先

我应该如何打破这条线,使其符合PEP8

    assert (sum(map(lambda x: len(x), 
                    (activities,apps,classes,users,verbs))) ==
            Object.query
                  .filter(Object.status != ObjectStatusChoices.DELETED)
                  .count())

首先,请记住,没有一个正确的PEP8答案。我更喜欢:

in_mem = sum(len(x) for x in (activities,apps,classes,users,verbs))
in_db = Object.query.filter(
                        Object.status != ObjectStatusChoices.DELETED
                        ).count()
assert in_mem == in_db

当然,如果你发现自己的陈述需要分成五行,你可能需要更多的陈述。

首先,请记住,没有一个正确的PEP8答案。我更喜欢:

in_mem = sum(len(x) for x in (activities,apps,classes,users,verbs))
in_db = Object.query.filter(
                        Object.status != ObjectStatusChoices.DELETED
                        ).count()
assert in_mem == in_db

当然,如果你发现自己有一条语句需要分成五行,你可能会想要更多的语句。

如果你把它重写成单独的行,这永远不会出现

它还允许您为中间值指定有意义的名称,我必须猜测这些值,但您可能知道它们,或者甚至可以将一些逻辑重构为函数,您也可以为这些函数指定有意义的名称

例如,不更改任何逻辑,甚至不重写任何逻辑,除非使用len代替lambda x:lenx:


如果你把事情重写成单独的行,这永远不会出现

它还允许您为中间值指定有意义的名称,我必须猜测这些值,但您可能知道它们,或者甚至可以将一些逻辑重构为函数,您也可以为这些函数指定有意义的名称

例如,不更改任何逻辑,甚至不重写任何逻辑,除非使用len代替lambda x:lenx:


首先,你应该用len替换lambda x:lenx有什么不清楚的吗?真的,我想大多数人会说,把它分成多行,然后命名中间值,甚至将片段重构成函数并命名,这更像是python,在这一点上,原始问题变得没有意义。@dokukantufekci lambda x:lenx是一个函数对象,它接受一个参数,我们将调用x并返回lenx。len是一个函数对象,它接受一个参数,我们将调用x并返回lenx。试着做两个summaplambda x:lenx,a,b,c和summaplen,a,b,c-它们是一样的。是映射将函数应用到每个元素,lambda只是一种生成函数的方法。试试我评论中的两个例子,看看。首先,你应该用len替换lambda x:lenx有什么不清楚的吗?真的,我想大多数人会说,把它分成多行,然后命名中间值,甚至将片段重构成函数并命名,这更像是python,在这一点上,原始问题变得没有意义。@dokukantufekci lambda x:lenx是一个函数对象,它接受一个参数,我们将调用x并返回lenx。len是一个函数对象,它接受一个参数,我们将调用x并返回lenx。试着做两个summaplambda x:lenx,a,b,c和summaplen,a,b,c-它们是一样的。是映射将函数应用到每个元素,lambda只是一种生成函数的方法。试一下我评论中的两个例子,请参见。PEP-8建议将第4行缩进以匹配括号或只缩进一个块,并将第5行移到第4行的末尾。虽然可能是这样,但问题确实明确要求PEP-8,大多数其他程序员都会希望这样做。PEP-8的全部目的是制定一个一致的标准,因为人们总是有不同的偏好。事实上,在重新审视PEP8时,我没有看到任何我违反的明确建议。PEP-8实际上很少提到如何打断长行。延续行应该使用Python的隐式行垂直对齐包装的元素,将括号、括号和大括号连接起来,或者使用悬挂缩进。使用悬挂缩进时,应考虑以下因素:;第一行上不应有任何参数,应使用进一步的缩进,以清楚地区分其作为续行。-您缩进得太远,第4行下面没有表示该行应该有进一步缩进的块-请参阅PEP-8中该部分的示例。一个缩进,如果行没有阻塞,两个缩进。我想当每个例子都显示某件事是以给定的方式完成的,很清楚它的精神是什么。我看不出,随机增加额外的缩进量,除了不太可读之外,还有什么别的原因?这是关于一致性的-很高兴知道应该在哪里查找下一位代码,并且遵循给定的样式会使这更容易。PEP-8建议缩进第4行以匹配括号或只缩进一个块,并将第5行移动到第4行的末尾。虽然可能是这样,但问题确实明确要求PEP-8,大多数其他程序员都希望遵循它。PEP-8的全部目的是制定一个一致的标准,因为人们总是有不同的偏好。事实上,在重新审视PEP8时,我没有看到任何我违反的明确建议。PEP-8实际上很少提到如何打破长线。延续线
s应该使用Python的隐式线垂直对齐包裹的元素,将括号、括号和大括号连接在一起,或者使用悬挂缩进。使用悬挂缩进时,应考虑以下因素:;第一行上不应有任何参数,应使用进一步的缩进,以清楚地区分其作为续行。-您缩进得太远,第4行下面没有表示该行应该有进一步缩进的块-请参阅PEP-8中该部分的示例。一个缩进,如果行没有阻塞,两个缩进。我想当每个例子都显示某件事是以给定的方式完成的,很清楚它的精神是什么。我看不出,随机增加额外的缩进量,除了不太可读之外,还有什么别的原因?这是关于一致性的-很高兴知道应该在哪里查找下一段代码,并且遵循给定的样式会使这更容易。这种方法的一个小问题是,如果使用python-O运行,它会删除断言,这仍然会创建长度和db_查询列表,然后在这种情况下忽略它们,它大概不会访问数据库,但仍然是不必要的。并不是说任何人都应该真正使用python-O,但它值得注意。@Dougal:这一点很好。当然,解决方案是显而易见的:将整个检查移动到一个函数中,并断言检查长度,这也意味着您可以将其作为可重用的后置条件或不变量,等等。这种方法的一个小问题是,如果您使用python-O运行,它会删除断言,这仍然会创建长度和db_查询列表,然后忽略它们。在这种情况下,它可能不会影响数据库,但仍然是不必要的。并不是说任何人都应该真正使用python-O,但它值得注意。@Dougal:这一点很好。当然,解决这个问题的方法很明显:将整个check移动到一个函数中,并断言check_length,这也意味着您可以将其作为可重用的后置条件或不变量,等等。。