按值传递变量

Passing Variables by Value

我有一个字典列表:

list = [{"id":2, "date": "2018-07-12"}]

现在我想生成一些不错的输出并为其创建一个函数:

def generateOutput(myList):  
   outputList = []        
   for l in myList:            
      l['date_short'] = "Jul-12"
   outputList.append(l)

   return outputList

这里是灾难开始的地方:

output = generateOutput(list)

输出很好,但是我需要进一步计算并且根本不应该 date_short 的列表得到了一个新密钥并且是:

list = [ {"id":2, "date": "2018-07-12", "date_short": "Jul-12" }]

如何克服这个问题?

您正在就地修改 myList 中的词典。相反,您可能希望在向它们添加新值之前单独复制它们。试试这个:

def generateOutput(myList):
    outputList = []
    for l in myList:
        output = l.copy()
        output['date_short'] = "Jul-12"
        outputList.append(output)
    return outputList

此外,您应该避免将变量命名为 list,因为 list 是 Python 中预定义类型的名称。

使用 copy 模块将变量的副本传递给函数。

import copy

list = [{"id":2, "date": "2018-07-12"}] 

def generateOutput(myList):  
   outputList = []        
   for l in myList:            
      l['date_short'] = "Jul-12"
   outputList.append(l)

   return outputList

generateOutput(copy.copy(list))