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

Best practice: local variables in a function (explicit vs implicit)

在函数内部使用局部变量有没有推荐的风格?我们应该像样式 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)

很确定在这种情况下会出现个人意见。但对我来说,情况 2 代表了一种更 pythonic 的表示事物的方式。

我回答的主要原因是在这种情况下您的函数名称说明了一切。我仅在必须或有助于提高可读性时才声明局部变量。

希望对你有帮助

编辑

为了证明我的回答,请使用您的这部分代码,

样式 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 return 降低了 url 并且会理解在样式 2 中该函数用于处理数据。

我并不是想说我是专家或其他任何东西,这是值得商榷的,我只是想澄清我的观点。

我更喜欢样式 2,因为我觉得它更容易阅读。

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

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

问得好,做得好,一直在考虑可读性,让它更容易下线。

我认为我的回答必须尽可能遵循您工作地点的编码标准。这是最重要的,应该与您合作的其他开发人员保持一致。

如果没有编码标准,就安排一个会议,一起写一个。这样你们都在使用相同的脚本(请原谅双关语)并且每个人都可以阅读代码。

我个人更喜欢显式版本。对我来说,这会更清楚发生了什么,从而减少我自己的错误。但是我知道有些人会认为这在简单的例子中有点矫枉过正。我想这取决于您首先学习的是什么语言,以及您是如何学习的以及在哪里学习的。