2014-05-17 13 views
4

我是否应该创建变量以避免长行代码?例如,在下面的代码中,变量stream_records仅在设置后才使用一次。是否有一个Python约定来避免冗长的代码行?

stream_records = stream.get_latest_records(num_records_to_correlate).values('value') 
stream_values = [float(record['value']) for record in stream_records] 

我应该这样做吗?

stream_values = [float(record['value']) for record in stream.get_latest_records(num_records_to_correlate).values('value')] 

我想优化可读性。我很想知道是否很难记住大量的变量名或难以阅读长长的代码行。

编辑:

另一个有趣的选项来考虑可读性(感谢约翰·史密斯可选):

stream_values = [ 
    float(record['value']) 
    for record in stream.get_latest_records(
     num_records_to_correlate 
    ).values('value') 
] 

回答

4

PEP 8是在Python开始的风格准则,它建议不源极线是超过79个字符长。

如果你的变量命名的很好,对中间结果使用变量也会执行一种文档。

2

第一个肯定是更容易阅读,所以如果没有性能问题,我将完全只要他们有自解释的名字,就去寻找更多的变量。如果有人(不是你)必须调试,也更容易调试。

0

第一个确实更具可读性。创建一个变量并不会在这里花费太多,所以你可以留下你的代码。此外,如果您正在调试它,则会更容易看到错误是来自get_latests_records还是来自您的列表理解。

然而,另一种很好的方式,将与map功能来构建你的列表:

stream_values = map(lambda x: float(x['value']), 
        stream.get_latest_records(num_records_to_correlate) \ 
        .values('value')]) 

lambda这里是必要的,对字典的正确值应用float。正如你所看到的,我已经限制每行字符的数量来尊重PEP8 convention,这可以帮助使代码可读。

+0

我个人发现列表理解比'map'和'lambda'函数的组合更具可读性。它们也可以以相同的方式分成多行。 –

+0

毕竟我认为这是一个观点。我非常熟悉'map'函数,所以... :) –

1

圆括号内的换行符(回车符)计为空白。 正如Bas Swinckels指出的那样,括号内的换行符也是如此。 所以你可以做这样的事情:

stream_values = [ 
    float(record['value']) 
    for record in stream.get_latest_records(
     num_records_to_correlate 
    ).values('value') 
] 

您还可以使用\继续以下行的声明。 例如:

long_variable_name = object1.attribute1.method1(arg1, arg2, arg3) + \ 
object2.attribute2.method2(arg1, arg2, arg3) 
+1

在这种情况下,\是不需要的,因为方括号内的所有内容都被自动解释为单行。 –

+0

哦。很高兴知道。我编辑我的答案。 –

+0

仅供参考:[隐含行加入](https://docs.python.org/2.7/reference/lexical_analysis.html#implicit-line-joining)... –