按值传递变量
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))
我有一个字典列表:
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))