代码之家  ›  专栏  ›  技术社区  ›  utengr

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

  •  1
  • utengr  · 技术社区  · 7 年前

    在函数内部使用局部变量时,有推荐的风格吗?我们应该像样式1那样使用更显式的局部变量,还是不像样式2那样使用?

    两种可能的样式:

    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)
    

    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 回复  |  直到 7 年前
        1
  •  4
  •   scharette    7 年前

    可以肯定的是,在这种情况下,会产生个人意见。但对我来说,情况2代表了一种更具python风格的表达方式。

    我回答的主要原因是,在本例中,函数名说明了一切。只有当我必须声明局部变量或局部变量有助于可读性时,我才声明局部变量。

    希望有帮助

    编辑

    为了演示我的答案,请使用代码的这一部分,

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

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

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

    我并不是说我是一个专家或任何东西,这是有争议的,我只是想澄清我的观点。

        2
  •  2
  •   René Pijl    7 年前

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

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

    1. 当子表达式的值必须可用于断言语句、调试或测试用例时。
        3
  •  1
  •   CodeMonkey123    7 年前

    这是一个很好的问题,一直以来都在考虑可读性,这让问题变得更简单。

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

    我个人的偏好是明确的版本。对我来说,这将更清楚发生了什么,从而减少我自己的错误。然而,我明白,在简单的例子中,有些人会认为这有点过头了。我想这要归结到你首先学会了什么语言,以及你是如何和在哪里学会的。