最佳实践:函数中的局部变量(显式与隐式)

时间:2017-10-17 14:47:42

标签: python python-3.x pep8

在函数中使用局部变量时是否有推荐的样式?我们是否应该使用样式1中更明确的局部变量,或者不像样式2那样使用?

两种可能的风格:

风格1:

import re


def doc_to_lower(url_raw):
    url_lower = [word.lower() for word in url_raw]
    return url_lower


def process_data(url_raw):
    url_split = re.split('//|/|-', url_raw)
    url_lower = doc_to_lower(url_split)
    return url_lower

url = 'http://www.bbc.com/sport/football/41653935'
tokens = process_data(url)

for token in tokens:
    print(token)

风格2:

import re


def doc_to_lower(url_raw):
    return [word.lower() for word in url_raw]


def process_data(url_raw):
    return doc_to_lower(re.split('//|/|-', url_raw))

url = 'http://www.bbc.com/sport/football/41653935'
tokens = process_data(url)

for token in tokens:
    print(token)

3 个答案:

答案 0 :(得分:4)

非常确定这是个人意见的情况。但对我来说,情境2代表了一种更为抒情的方式来代表事物。

我回答的主要原因是,在这种情况下,您的函数名称就是全部。我声明局部变量只有在我必须或者它有助于提高可读性的时候。

希望有所帮助

修改

要证明我的答案,请参考代码的这一部分,

风格1:

def process_data(url_raw):
    url_split = re.split('//|/|-', url_raw)
    url_lower = doc_to_lower(url_split)
    return url_lower

风格2:

def process_data(url_raw):
    return doc_to_lower(re.split('//|/|-', url_raw))

如果我要重复使用您的代码,我一眼就会认为样式1会返回一个降低的网址,并且会理解在样式2中该函数用于处理数据。

我并不是说我是专家或其他任何人,这是有争议的,我只想澄清我的观点。

答案 1 :(得分:2)

我优先考虑样式2,因为我觉得它更容易阅读。

在某些情况下,我可以想到使用样式1的两个原因:

  1. 当表达变得非常复杂时。使用样式1,您可以拆分表达式的一部分并为其指定可读名称。
  2. 当子表达式的值必须可用于断言语句,调试或测试用例时。

答案 2 :(得分:1)

在考虑可读性方面一直存在很好的问题和做得很好,使其更容易下线。

我认为我的答案必须遵循您工作地点的编码标准。这是最重要的,应该与您正在使用的其他开发人员保持一致。

如果没有编码标准,请安排会议并一起写一个。这样你就可以从同一个脚本开始工作(原谅双关语),代码对每个人都是可读的。

我个人的偏好是明确的版本。对我而言,发生的事情会更清楚,从而减少我自己的错误。但是我知道有些人会认为这在简单的例子中有点过分。我想这取决于你先学会了哪些语言,以及你学习它们的方式和地点。