Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最佳实践:函数中的局部变量(显式与隐式)_Python_Python 3.x_Pep8 - Fatal编程技术网

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

Python 最佳实践:函数中的局部变量(显式与隐式),python,python-3.x,pep8,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('//|/|-'

在函数内部使用局部变量时,是否有推荐的样式?我们应该像样式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)
def process_data(url_raw):
    url_split = re.split('//|/|-', url_raw)
    url_lower = doc_to_lower(url_split)
    return url_lower
风格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代表了一种更具python风格的表现方式

我回答这个问题的主要原因是,在本例中,函数名说明了一切。我声明局部变量只是在我必须声明的情况下,或者如果它有助于可读性的话

希望能有帮助

编辑

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

风格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)
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代表了一种更具python风格的表现方式

我回答这个问题的主要原因是,在本例中,函数名说明了一切。我声明局部变量只是在我必须声明的情况下,或者如果它有助于可读性的话

希望能有帮助

编辑

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

风格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)
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可以拆分表达式的各个部分,并为其指定一个可读的名称
  • 当子表达式的值必须可用于assert语句、调试或测试用例时

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

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

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

  • 这是一个很好的问题,而且在考虑可读性方面做得很好,使它更容易实现

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

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


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

    这是一个很好的问题,一直以来都在思考可读性,这使它更容易理解

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

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


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

    “许多好的问题都会根据专家经验产生一定程度的意见,但对这个问题的回答往往几乎完全基于意见,而不是事实、参考资料或具体的专业知识。”-请看答案:“我更喜欢这个,我想,我个人的……”不。(还有十二个)撇开观点不谈,style 1的分步版本在异常方面有明显的优势。Python在解释表达式中发生异常的确切位置方面不是很好,因此如果在赋值
    url\u split
    过程中得到异常,将有助于快速缩小原因,同时在复杂的
    re中得到异常样式2的turn
    语句或多或少会让您产生猜测。想象
    a+b+c+d+e+f
    导致
    类型错误:不支持的操作数类型对于+:“int”和“str”
    。哪一个是罪魁祸首?但这是一种折衷。拆分太多会导致代码不可读。@阿尔夫假设您的代码经过良好测试,我看不出您的测试如何适用于这个问题。@scharette这有点像是说我们不需要堆栈跟踪,因为经过良好测试的代码不会产生堆栈跟踪。代码可能会经过很好的测试,仍然有一些调用可能会导致您以前从未遇到过的异常(例如网络超时、您没有想到的边缘情况等)。好的代码是以某种方式编写的,这样意外的行为会导致仍然有助于查找罕见错误的情况。以功能性风格编写所有内容(尽可能优雅)“许多好的问题都会根据专家经验产生一定程度的意见,但对这个问题的回答往往几乎完全基于意见,而不是事实、参考资料或具体的专业知识。”-看看答案:“我更喜欢这个,我更喜欢这个。”