返回实例列表没有什么区别吗?那么性能呢?

2023-12-20

我刚刚意识到,对于我的程序中的特定模块,返回或不返回实例列表根本没有区别。使用固定种子,结果是相同的。

因此,我想知道:

  1. 包含 return 语句似乎是更好的编程实践。那是对的吗?

  2. 我主要担心的是性能。我很难计时,因为计算机中发生的其他事情似乎会影响结果。我得到了 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 

在上面的例子中,我发现退货是可选的。返回包含代理人、家庭等的列表没有什么区别。

所以,我知道这个例子是不可重现的,但问题与一般事实有关。

我假设该列表位于内存中的某个位置。

附注我不是计算机科学家,而是试图进行一些基于代理的建模的研究人员。谢谢!


原则上,不返回任何东西会更快。实际上,这并不重要,而且是无用的微观优化。

Python 不会围绕物体移动,它会移动参考到对象(存储在名称中)。如果您有 C++ 背景,请考虑return a,b,c返回一个由三个指针组成的数组。与函数正在执行的所有其他显式操作相比,此操作的性能开销可以忽略不计。

如果您担心性能,您也不应该为程序计时。任何一个profile您的程序以找出您的程序中的位置大量时间被花费了。或者time测试代码以了解如何更好地执行关键代码(通过分析识别)。一个起点是timeit计时代码包,以及各种 python 分析器,例如vmprof.

例如,要找出的开销return一般来说,你可以安排明确的陈述:

$ python3 -m timeit -s 'def foo():' -s '  pass' 'foo()'
10000000 loops, best of 3: 0.0994 usec per loop
$ python3 -m timeit -s 'def foo():' -s '  return' 'foo()'
10000000 loops, best of 3: 0.0981 usec per loop
$ python3 -m timeit -s 'def foo():' -s '  return 1, 2' 'foo()'
10000000 loops, best of 3: 0.0961 usec per loop
$ python3 -m timeit -s 'bar, foo=object(), object()' -s 'def foo():' -s '  return foo, bar' 'foo()'
10000000 loops, best of 3: 0.136 usec per loop

无论你不返回,都不返回任何内容(隐含的None)或返回常量并不重要。如果您实际返回对象,则会增加大约 0.04 usec (!!!) 的开销。只是calling一个函数的性能成本已经是原来的 2.5 倍。

从编码风格的角度来看,IMO 认为 python 标准库的观点是最好的:如果就地更改了某些内容,则不要返回它。这强调了对象是通过副作用而改变的,并且没有必要创建对它们的新引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回实例列表没有什么区别吗?那么性能呢? 的相关文章

  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • pandas DataFrame.join 的运行时间是多少(大“O”顺序)?

    这个问题更具概念性 理论性 与非常大的数据集的运行时间有关 所以我很抱歉没有一个最小的例子来展示 我有一堆来自两个不同传感器的数据帧 我需要最终将它们连接成两个very来自两个不同传感器的大数据帧 df snsr1 and df snsr2
  • VSCode Settings.json 丢失

    我正在遵循教程 并尝试将 vscode 指向我为 Scrapy 设置的虚拟工作区 但是当我在 VSCode 中打开设置时 工作区设置 选项卡不在 用户设置 选项卡旁边 我还尝试通过以下方式手动转到文件 APPDATA Code User s
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 为什么一旦我离开内置的运行服务器,Django 就无法找到我的管理媒体文件?

    当我使用内置的简单服务器时 一切正常 管理界面很漂亮 python manage py runserver 但是 当我尝试使用 wsgi 服务器为我的应用程序提供服务时django core handlers wsgi WSGIHandle
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Spider 必须返回 Request、BaseItem、dict 或 None,已“设置”

    我正在尝试从以下位置下载所有产品的图像 我的蜘蛛看起来像 from shopclues items import ImgData import scrapy class multipleImages scrapy Spider name m
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • 如何使用 AWS Lambda Python 读取 AWS S3 存储的 Word 文档(.doc 和 .docx)文件内容?

    我的场景是 我尝试使用 python 实现从 Aws Lambda 读取 AWS 存储的 S3 word 文档 doc 和 docx 文件内容 下面的代码是我使用的 我的问题是我可以获取文件名 但无法读取内容 def lambda hand
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有

随机推荐

  • 位移位大型二进制文件?

    在 C 中对大量二进制数据进行位移位的最佳或推荐方法是什么 我有一个 200K 二进制文件 我想左移然后右移整个文件 如果您的操作系统可以支持它 请使用内存映射文件 然后做一点移位就会非常非常高效 请参阅此答案以获取更多信息 内存映射文件有
  • browserify external 与 except 之间有什么区别?

    我在用着browserify并试图让它跳过浪费时间包括或解析 jquery 和其他require less 文件我通过 CDN 加载 我应该使用bundle exclude jquery or bundle external jquery
  • Apple iOS 浏览器随机不会呈现动态加载的 HTML 对象

    我们遇到的问题仅在 iOS 浏览器 iOS 12 0 上明显 我们的 SPA 应用程序使用 HTML 对象标签通过 JavaScript 将小部件 HTML CSS JS 文件 加载到页面上 该问题是间歇性的 当页面加载时 某些小部件不会在
  • 在 AWS DynamoDB 上存储聊天日志?

    我正在考虑使用 AWS DynamoDB 构建一个聊天应用程序 该应用程序将支持一对一和群聊 我想为每个聊天创建一个表 其中每个发送的聊天文本行都有一条记录 DynamoDB 适合这种工作吗 我也在考虑合并两个表 但是 如果 假设 有 10
  • MongoDB 身份验证错误

    连接 Mongodb 时出现此错误 我不太确定这个错误是什么 使用 CompositeServerSelector Selectors ReadPreferenceServerSelector ReadPreference Mode Pri
  • 并排对齐 2 个 div

    我需要并排对齐 2 个 div 它们都位于没有设置高度的包装 div 内 我的问题是 当我分别使用 float left 和 float right 时 div 似乎不会 留在 包装器 div 内 我可以看出 因为包装器 div 与页面具有
  • 如何保持 RxJ 干燥

    DRY 不要重复自己 假设我在我的应用程序中经常使用以下代码 observable pipe tap value gt console log value map value gt value 5 more repeated stuff 假
  • Angular 2自定义验证器:检查输入值是否为整数?

    在 Angular2 项目中 我需要验证一些输入 如何轻松检查输入值是否为整数 我尝试使用Number control value 返回0对于空的字段 不好 or parseInt control value 10 不考虑空格 如果我有类似
  • Microsoft.TeamFoundation.VersionControl.Client.ItemNotMappedException 即使工作区存在并且具有映射

    使用 TFS 2015 update 2 在计算机中安装代理 代理创建其工作区 内部开发的一些自定义 MSBuild 任务已在将在代理上运行的生成定义中实现 这些任务针对 TFS 服务器执行一些操作 当构建定义排队等待新构建时 我得到的是
  • 将语言包嵌入到应用程序中

    我正在制作一个使用离线语音识别的应用程序 来自 Google API 的 SpeechRecognizer 它工作得很好 但我需要在使用该应用程序之前下载语言包 所以 这是我的问题 有没有办法嵌入语言包并直接从我的应用程序安装它 或者从Pl
  • 如何在Java小程序中打开模式对话框?

    我正在尝试在前面显示一个模式对话框Applet 我当前的解决方案像这样获取根框架 Frame getMyParent Container parent getParent while parent instanceof Frame pare
  • Logstash - Memorize 插件的使用

    尝试使用 记忆 插件 如下所示 if message matching event grok match gt message mymatch datetime memorize field gt datetime if message a
  • 如何使 gcc 或 ld 报告未定义的符号但不失败?

    如果你用 GCC 编译一个共享库并传递 z defs 标志 我认为它只是盲目地传递给 ld 那么你会得到一个很好的报告 说明哪些符号未定义 并且 ld 失败 没有 so 文件 被建造 另一方面 如果您不指定 z defs 或显式指定 z n
  • 两个列表之间的交集 F#

    我正在寻找一个函数 它可以获取两个列表之间的交集并创建一个新列表 我有这个函数 let intersect x y Set intersect Set ofList x Set ofList y 可以实现我想要的功能 但我不想使用 F 中的
  • C#中ArrayList的初始大小是多少?

    我想知道C 中ArrayList的初始大小是多少 0 见下文 16 我必须为此答案添加字符 因为最少 18 个字符 编辑 哎呀 最初的capacity是16 初始大小当然是0 因为它是空的 必须学会如何阅读 或者你必须学习如何提出你的问题
  • 离线时 start_url 不会响应 200:start_url 确实响应,但不是通过服务工作线程响应。灯塔审计问题

    我正在创建一个与 Service Worker 一起离线工作的 PWA 目前它工作正常 但 Lighthouse Audit 存在问题 当我运行 Lighthouse 时 在 PWA 部分我遇到这个问题 离线时 start url 不响应
  • Shiny:使 renderUI 对下拉列表做出反应,而不是对 SubmitButton 做出反应

    如何让 renderUI 对用户从下拉列表中选择不同的值做出反应 而无需单击我的提交按钮 我有一个 wellPanel 其中包含 3 个内容 1 我的下拉列表2 一组动态输入 由我的 renderUI 函数创建 取决于 1 中的选择 3 提
  • Mysql索引配置

    我有一张满是新闻的 450000 行表 表架构是这样的 CREATE TABLE IF NOT EXISTS news id int 11 NOT NULL auto increment cat id int 11 NOT NULL tit
  • 指定哪些字段在 ElasticSearch 中建立索引

    我有一个包含许多我从不查询的字段的文档 因此我想关闭这些字段的索引以节省资源 我相信我需要禁用 all field http www elasticsearch org guide reference mapping all field h
  • 返回实例列表没有什么区别吗?那么性能呢?

    我刚刚意识到 对于我的程序中的特定模块 返回或不返回实例列表根本没有区别 使用固定种子 结果是相同的 因此 我想知道 包含 return 语句似乎是更好的编程实践 那是对的吗 我主要担心的是性能 我很难计时 因为计算机中发生的其他事情似乎会