- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 3 个列表:
years = [2013,2014,2015,2016,2017,2018]
GamsVars = ['scen_name','timefile']
settings = ['ScenarioA','s']
我有一个函数,旨在返回一个与设置完全相同的列表,但在相关条目后附加了年份:
def AppendYearToSettings(year,GamsVarsIn,SettingsIn):
SettingsOut = SettingsIn
SettingsOut[GamsVarsIn.index('scen_name')] = SettingsIn[GamsVarsIn.index('scen_name')] + "\\" + str(year)
SettingsOut[GamsVarsIn.index('timefile')] = SettingsIn[GamsVarsIn.index('timefile')] + str(year)
return(SettingsOut)
当我在循环中测试该函数时:
for y in years:
ysettings = AppendYearToSettings(y,GamsVars,settings)
print(ysettings)
我的ysettings
正在累计追加年份:
['ScenarioA\\2013', 's2013']
['ScenarioA\\2013\\2014', 's20132014']
['ScenarioA\\2013\\2014\\2015', 's201320142015']
['ScenarioA\\2013\\2014\\2015\\2016', 's2013201420152016']
['ScenarioA\\2013\\2014\\2015\\2016\\2017', 's20132014201520162017']
['ScenarioA\\2013\\2014\\2015\\2016\\2017\\2018', 's201320142015201620172018']
我已尝试明确阻止设置(原始设置)被修改,但似乎我的函数正在以某种方式修改设置。
导致此问题的原因是什么?
最佳答案
What is the reason that is causing this problem?
当您执行SettingsOut = SettingsIn
时,您只是创建对SettingsIn
引用的对象的另一个引用。如果您想复制该列表,可以执行以下操作:
SettingsOut = SettingsIn[:]
或者,您可以使用copy.deepcopy (您需要导入copy
才能使用它)。仅当列表的元素本身是引用并且您还想创建对象的新副本时才需要此操作。看看下面 John Y 的评论。
SettingsOut = copy.deepcopy(SettingsIn)
看看这个:
>>> l1 = [1, 2, 3, 4, 5]
>>> l2 = l1
>>> l2 is l1
True
>>> id(l1)
24640248
>>> id(l2)
24640248
>>> l2 = l1[:]
>>> l2 is l1
False
>>> id(l2)
24880432
>>> id(l1)
24640248
>>>
<小时/>
所以你的函数可能是这样的:
def AppendYearToSettings(year,GamsVarsIn,SettingsIn):
SettingsOut = SettingsIn[:]
SettingsOut[GamsVarsIn.index('scen_name')] = SettingsIn[GamsVarsIn.index('scen_name')] + "\\" + str(year)
SettingsOut[GamsVarsIn.index('timefile')] = SettingsIn[GamsVarsIn.index('timefile')] + str(year)
return SettingsOut
for y in years:
ysettings = AppendYearToSettings(y, GamsVars, settings)
print(ysettings)
输出:
['ScenarioA\\2013', 's2013']
['ScenarioA\\2014', 's2014']
['ScenarioA\\2015', 's2015']
['ScenarioA\\2016', 's2016']
['ScenarioA\\2017', 's2017']
['ScenarioA\\2018', 's2018']
<小时/>
有点误入歧途,但你应该看看 PEP style guide for function naming ;-) 它说:
Function Names
Function names should be lowercase, with wordsseparated by underscores as necessary to improve readability.
mixedCase is allowed only in contexts where that's already theprevailing style (e.g. threading.py), to retain backwardscompatibility.
关于python - 函数在无意时修改输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36774411/
我不知道这是否是其他人遇到的问题,但我在 python 中有这样的代码: def makemove(board,move,val): new=board new[move[0]][mo
不是重复的 我想在不使用任何默认电子邮件应用程序的情况下发送电子邮件,所以我进行了一些搜索,然后偶然发现了这个使用 JavaMail API 的解决方案 - Sending Email in Andr
在网络浏览器中,我希望能够使用 java 脚本打开任何已安装的应用程序(例如 facebook、twitter 等)。我无法更新 Intent 文件,只想从 java 脚本中进行更新。有没有办法从 j
我是一名优秀的程序员,十分优秀!