如何修复重新声明的警告?

时间:2018-01-03 19:20:20

标签: python python-3.x python-2.7

function getDynamicRows(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('dynamicSheet');
  var sourceRange = sheet.getRange('A1:B');
  var data = sourceRange.getValues(); // Array of arrays [[Row1],[Row1],[Row3]]

  // add data to next empty row in the static sheet. 
  var targetSheet = ss.getSheetByName('targetSheet');
  data.forEach(function(row){
    targetSheet.appendRow(row)
  })


}
  

重新宣布'我'上面定义的没有用法

如何修复此警告?!!!

1 个答案:

答案 0 :(得分:2)

这是一个警告,因为在Python-2.x中, list comprehension 中的变量是"泄漏"。这意味着这些本地作用域。例如:

>>> i = 'somevalue'
>>> [[] for i in range(5)]
[[], [], [], [], []]
>>> i
4

由于您在两个列表推导中都使用了i,因此您将使用第二个i覆盖第一个中声明的i

如果您想摆脱此错误,可以使用不同的变量名称:

x = [[] for i in range(5)]
y = [[] for j in range(10)]

在这种情况下,您不会在列表理解中使用ij。通常是"一次性"变量是下划线(_)或甚至是双下划线(__):

x = [[] for __ in range(5)]
y = [[] for __ in range(10)]

正如"Hitchhikers guide to Python"中所写:

  

如果您需要分配某些内容(例如,在解包中)但不需要该变量,请使用__   (..)

     
    

许多Python样式指南建议使用单个下划线     {1}用于一次性变量而不是双下划线_     推荐这里。问题是__通常用作别名     对于_函数,也用于交互式     提示保持上一次操作的值。使用双     相反,下划线同样清晰,几乎同样方便     消除了意外干扰其中任何一种的风险     其他用例。