函数中使用局部变量时,是否有推荐的样式?我们应该像样式 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 返回一个降低的 url,并且会理解在样式 2 中该函数用于处理数据。
我并不是想说我是专家或任何东西,这是值得商榷的,我只是想澄清我的观点。
我更喜欢样式 2,因为我发现它更容易阅读。
在某些情况下,我可以想到使用样式 1 的两个原因:
- 当表达式变得非常复杂时。使用样式 1,您可以拆分表达式的各个部分并为其分配一个可读的名称。
- 当子表达式的值必须可用于断言语句、调试或测试用例时。
很好的问题,并且一直考虑可读性做得很好,使其更容易下线。
我认为我的答案必须尽可能遵循您工作地点的编码标准。这是最重要的,应该与您正在使用的其他开发人员保持一致。
如果没有编码标准,请安排一次会议并一起编写一次。这样你们都在同一个脚本上工作(请原谅双关语),并且每个人都可以阅读代码。
我个人更喜欢明确的版本。对我来说,会更清楚发生了什么,从而减少我自己的错误。但是,我知道有些人会认为在简单的例子中这有点矫枉过正。我想这归结为你首先学习了什么语言,以及你如何以及在哪里学习它们。