Python 什么是派林;“局部变量太多”;想告诉我我该怎么办?

Python 什么是派林;“局部变量太多”;想告诉我我该怎么办?,python,pylint,Python,Pylint,我正在开发一个python函数,它读取Excel或CSV文件中的各种测量数据,并输出一个dict,其中包含元数据字符串和数据框架 def reader(file): """ blablaba """ #500 lines of code output = {'Error': Errorflag, 'Name': Name, 'Location': Location, # 20 more variables

我正在开发一个python函数,它读取Excel或CSV文件中的各种测量数据,并输出一个dict,其中包含元数据字符串和数据框架

def reader(file):
"""
blablaba
"""
#500 lines of code
output = {'Error': Errorflag, 'Name': Name, 'Location': Location,
          # 20 more variables
          'Lat': Lat, 'Lon': Lon, 'Number': Number, 'data': data}    
return output
这一切都很好,但是pylint告诉我太多的局部变量(120/15)pylint(太多的局部变量)。所以我显然违反了“好”的编码风格,但我想知道这个要求从何而来,我能做些什么

只是帮助说明“当一个函数或方法有太多的局部变量时使用了太多的局部变量(%s/%s)。”有点帮助,告诉我我的函数可能太复杂,我应该考虑使用单独的函数。< /P> 我当然可以这样做,但这要么意味着将

reader
转换为多个函数(
location\u metadatareader
type\u metadatareader
errorfinder
datareader
,…)这将使使用和导入它成为地狱,或者我可以将函数中的一堆东西转换为函数本身,例如,代替

elevation = elev.replace(",", ".")
elevStart = elevation.find(';')+1
elevEnd = elevation.find('\n')
elevation = elevString1[elevStart:elevEnd]
elev = float(elev)
我可以封装在一个函数中

def elev(elevation):
    elevation = elev.replace(",", ".")
    elevStart = elevation.find(';')+1
    elevEnd = elevation.find('\n')
    elevation = elevString1[elevStart:elevEnd]
    elev = float(elev)
return(elev)

elev = elev(elevation)
添加更多行,但没有太多收益


那么,我的选择是什么(除了重新思考整个功能或关闭pylint的这一部分之外)?但更重要的是:这种风格惯例的原因是什么?为什么我应该(或不应该)投入一些工作来遵循它?

我会将其解释为表明您的函数做得太多了,应该将其分解为更小的函数。但是,如果您认为您的代码更好,最终取决于您,您可以忽略警告。最终取决于您是否遵循python的样式指南,但有很多您希望这样做的理由很充分,例如使您的代码更清晰、更可读、更优化……如果您的方法有太多的局部变量,这可能意味着您的方法比您遵循任何良好实践时的长度要长。例如,您的
reader
方法似乎有500行代码。这就是o许多代码行不仅适用于python,也适用于大多数语言。它仍然可以工作,但对于包括您在内的其他开发人员来说,阅读这些代码可能是一个大问题。您可以说
“将读取器转换为多个函数(location\u metadatareader,type\u metadatareader,errorfinder,datareader,…)这将使使用和导入it成为地狱”
-我不明白为什么您认为将函数拆分为更小的函数会使其更难使用或导入。如果您希望这样使用,您仍然可以使用一个中心函数调用所有其他函数。总之,您的选项要么遵循样式指南,配置pylint以跳过某些规则,要么不太严格t、 或者只是删除pylint并自己编写代码。但是相信我,如果你选择第二个选项,你迟早会后悔的。另外,重构的另一个原因是:正确地对一个复杂的大函数进行单元测试往往比对几个小函数进行单元测试要困难得多。我会把它解释为你的Function做的太多了,应该分解成更小的函数。但是如果您认为您的代码更好,那么最终由您决定,您可以忽略警告。最终由您决定是否遵循python的样式指南,但是有很多很好的理由说明您为什么要这样做,例如使您的代码更清晰、更具可读性、更易于理解优化…如果您的方法有太多的局部变量,这可能意味着您的方法比您遵循任何良好实践时的方法要长得多。例如,您的
reader
方法似乎有500行代码。这不仅对于python,而且对于大多数语言来说,都是太多的代码行。它仍然可以工作,但对于包括您自己在内的其他开发人员来说,阅读该代码可能是一个大问题。您可以说,
“将读取器转换为多个函数(location\u metadatareader,type\u metadatareader,errorfinder,datareader,…),这将使使用和导入它变得非常困难。”
-我不明白为什么您认为将函数拆分为更小的函数会使其更难使用或导入。如果您希望这样使用,您仍然可以使用一个中心函数调用所有其他函数。总之,您的选项要么遵循样式指南,配置pylint以跳过某些规则,要么不太严格t、 或者只是删除pylint并自己编写代码。但是相信我,如果你选择第二个选项,你迟早会后悔的。另外,重构的另一个原因是:正确地对一个复杂的大函数进行单元测试往往比对几个小函数进行单元测试要困难得多。