使用 if/else 或字典更好的优化技术

2023-11-26

哪个优化更好?

  • 接收“字符串”的一系列 if/else 语句会为其返回适当的函数。 (大约 40-50 个 if/else 语句)。
  • 维护键值对的字典。键作为字符串,值作为函数对象,以及一个用于搜索和返回函数对象的主函数。

使用上述方法实际返回函数对象的主函数将被调用数百万或数十亿次,因此需要智能地执行此操作。更好的方法是什么?

For e.g.

dict['str1'] = func1
dict['str2'] = func2
and so on..

def main_func(str):
    return dict[str]

Or

def main_func(str):
    if 'str1':
      return func1
    elif 'str2':
      return func2

哪个会更好..?如果我们有50-60个这样的字符串,这个过程需要数十亿次。

将函数对象存储在函数本身的字典中:-

def func1():
   if dict.has_key('str1'):
        dict['str1'] = func1
   -- do something --

这个和上面哪个更好。这看起来干净多了。但请记住,这些函数会被调用多次,因此 has_key 函数也会被调用多次。

Thanks


选择词典。

词典 ...

  • 是内置的
  • 是蟒蛇式的
  • 需要更少的样板代码
  • 与 if-else 线性 O(n) 复杂度相比,具有 O(1) 复杂度
  • 并没有过早悲观(如果不进行分析,我们没有足够的理由相信这是一种效率较低的方法)

我建议首先使用字典编写解决方案,然后看看该解决方案是否足够快以满足您的需求。如果是这样,那就太好了,你就完成了。如果没有,则以其他方式计时。

考虑这样的解决方案(它将返回None如果未找到该字符串):

func_dict = {}
func_dict['str1'] = fun1
func_dict['str2'] = fun2
...
def function_lookup(func_string):
    return func_dict.get(func_string)

然后,在你的 main 中,简单地写function_lookup(whatever_string_variable)尝试查找您的函数。这样可以避免每次都重新构建字典function_lookup叫做。

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

使用 if/else 或字典更好的优化技术 的相关文章

随机推荐

  • 如何在 Chrome 打包应用程序中从 Web 视图中的链接打开新窗口

    为了显示来自横幅广告交换的广告 我正在加载一个包含链接到广告服务器的 iframe 的 Web 视图 通过一些 JavaScript 我可以将广告链接目标设置为 blank 以便广告将在单独的浏览器窗口中打开 否则它将在同一个小网络视图中打
  • UIBarButtonItem 与 UIButton 作为 CustomView - 从 UIButton 中,如何访问其中的 UIBarButtonItem?

    我有一个UIBarButtonItem with UIButton作为自定义视图 The UIButton has a addTarget action 在上面 在该操作中 我呈现了一个弹出窗口 我目前正在从sender frame the
  • 正则表达式模式可选字符[重复]

    这个问题在这里已经有答案了 我想匹配像 19740103 0379 或 197401030379 这样的字符串 即破折号是可选的 我如何使用正则表达式来实现这一点 通常你可以只使用 或者 您可以使用 0 1 但你应该发现 因为几乎所有地方都
  • 别名资源 (WPF)

    我试图在 XAML 中为资源添加别名 如下所示
  • 从电话号码中提取代码国家/地区 [libphonenumber]

    我有一个这样的字符串 33123456789 法国电话号码 我想在不知道国家 地区的情况下提取国家 地区代码 33 例如 如果我有另一部来自其他国家 地区的手机 它应该可以工作 我使用谷歌图书馆https code google com p
  • matlab中如何判断一个矩阵是否为空?

    在我的 matlab 程序中 我想在进一步操作之前确定变量或函数的输出是否为空 实际上 我已经编写了一个计算两条线段之间的交点的函数 如果没有交集 则函数不返回任何内容 因此函数分配的变量将为空矩阵 我知道我可以使用size功能 但有没有更
  • 有没有办法使用 javascript 检测元素所在的 CSS 网格列和行?

    有没有一种方法可以在 JavaScript 中动态检测 CSS 网格中元素所在的网格列和行 我有一个网格 我设置了三个断点 使其具有 4 3 或 2 列 我想要做的是 如果用户单击某个单元格 则将单元格中的新元素立即动态覆盖到被单击的单元格
  • 如何检测 jQuery 中新元素的创建?

    假设我有以下代码 它返回页面上锚元素的数量 function getLinkCount alert Links a length 如果我在文档准备好后调用它 它将按预期工作 但是 如果现在通过 Javascript 动态地将新链接插入到页面
  • 在 Android Studio 1.3+ 自动完成中隐藏 android.R 资源

    是否可以将Android Studio配置为仅显示 drawable里面的资源project folder 我正在做的项目是一个行业项目 很少需要我使用R资源 我不认为你实际上可以做到这一点 只有库开发人员可以选择将资源隐藏在他们的aar分
  • 函数不改变传递的指针 C++

    我有我的职责并且我正在充实targetBubble那里 但调用这个函数后它没有被填充 但我知道它被填充在这个函数中 因为我有输出代码 bool clickOnBubble sf Vector2i mousePos std vector
  • 对 PHP 的非阻塞 Ajax 请求

    我正在使用 PHP 从远程服务器下载一个 大 文件 并且通过单击网页上的下载按钮来触发此下载 所以当我点击download网页上的按钮 然后Ajax请求 有角度 http 被制作为 PHP 函数 该函数使用触发下载cURL 同时 我想使用
  • 如何在 PHP 中创建一个带有反斜杠的字符串? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我需要一个反斜杠作为字符串的一部分 我该怎么做 当反斜杠 不转义字符串的终止引号或以其他
  • 查找与给定条件匹配的元素的索引

    给定一个数组 如何找到与给定条件匹配的元素的所有索引 例如 如果我有 arr x o x o x 查找该项目所在的所有索引x 我可以做 arr each with index map a i a x i nil compact gt 0 2
  • 可以使用异常来检查数组边界吗?

    我想检查给定的坐标是否在数组内 public boolean checkBounds int x int y try Object val array x y return true catch ArrayIndexOutOfBoundsE
  • 将图像从 URL 加载到表视图单元格中的图像视图的更快方法

    我用它来加载 URL 到图像视图 let url NSURL string URL let data NSData contentsOfURL url self releasephoto image UIImage data data 但是
  • 检测当前 iPhone 输入语言

    有谁知道 我可以获得iPhone应用程序中当前的输入语言和 或键盘布局吗 输入语言更改时我还能收到通知吗 在 iOS 4 2 及更高版本中 您可以使用UITextInputMode类来确定当前用于文本输入的主要语 言 UITextInput
  • 使用 roxygen2 构建 R 包时出错

    我有 2 个文件 File R 和 Cpp File c Cpp File c 中的内容 include
  • 如何编写线程安全的自动化测试

    我有一个不是线程安全的类 class Foo Abstract base class code which is not thread safe 此外 如果您有 foo1 和 foo2 对象 则在 foo2 gt anotherFunc 返
  • 构建适用于 Android 的 OpenCV 并将其与 NDK 一起使用

    背景 我目前正在 Android Studio 上为 Moverio BT 200 增强现实眼镜开发一个应用程序 我正在使用 OpenCV 特别是该库的 arUco 模块 该模块必须与 NDK 一起使用 另外 它不在稳定版本中 所以我自己编
  • 使用 if/else 或字典更好的优化技术

    哪个优化更好 接收 字符串 的一系列 if else 语句会为其返回适当的函数 大约 40 50 个 if else 语句 维护键值对的字典 键作为字符串 值作为函数对象 以及一个用于搜索和返回函数对象的主函数 使用上述方法实际返回函数对象