【发布时间】:2016-11-07 08:10:56
【问题描述】:
我刚刚意识到,对于我程序中的特定模块,返回或不返回实例列表根本没有区别。使用固定种子,结果是相同的。
因此,我想知道:
包含 return 语句似乎是更好的编程习惯。对吗?
我主要担心性能。我很难计时,因为计算机中发生的其他事情似乎会影响结果。我得到 4 分 3 秒,然后我得到 5 分钟而不更改一个逗号。
请看下面的例子:
有一个从另一个模块调用的大函数,并传递了很多包含不同实例对象的列表:
def check_demographics(month, my_agents, families, firms, my_graveyard, year, mortality_men, mortality_women, fertility, state_id):
在该函数中,我有以下函数:
def mortal(my_agents, my_graveyard, families, agent, firms):
my_agents.remove(agent)
my_graveyard.append(agent)
families[agent.get_family_id()].death_member(agent)
if families[agent.get_family_id()].num_members() == 0:
families[agent.get_family_id()].empty_house()
if agent.is_employed():
firms[agent.get_workplace()].obit(agent)
return my_agents, families, firms, my_graveyard
在上述情况下,我发现返回是可选的。返回包含代理、家庭等的列表没有区别。
所以,我知道该示例不可重现,但问题与一般事实有关。
我假设列表在内存中的某个地方。
附言我不是计算机科学家,而是试图做一些基于代理的建模的研究人员。谢谢!
【问题讨论】:
-
您的问题到底是什么?如果这就是你真的不需要返回列表的原因,那是因为你所有的操作都是就地操作。由于您将 REFERENCE 传递给列表,因此这些就地操作将在列表本身上完成,并且您传递的相同引用将受到影响。
-
问题是:如果是可选的,我不需要return,对吧?其次,哪种方式更快(有或没有返回)。谢谢。
-
python 返回的是对这些对象的引用元组。与通过更多引用工作的整个函数的开销相比,这简直可以忽略不计。是否拥有
return取决于您的功能应该做什么;通常,python 避免返回已更改的输入以强调这一点。顺便说一句,你不应该time你的代码,你应该profile它。
标签: python performance return