纯函数的好处

2023-12-30

今天我正在阅读有关纯函数的内容,对其用法感到困惑:

如果一个函数为同一组输入返回同一组值并且没有任何可观察到的副作用,则该函数被称为纯函数。

e.g. strlen()是一个纯函数,而rand()是一种不纯的。

__attribute__ ((pure)) int fun(int i)
{
    return i*i;
}

int main()
{
    int i=10;
    printf("%d",fun(i));//outputs 100
    return 0;
}

http://ideone.com/33XJU http://ideone.com/33XJU

上述程序的行为方式与没有pure宣言。

将函数声明为有什么好处pure[如果输出没有变化]?


pure让编译器知道它可以对函数进行某些优化:想象一下像这样的代码

for (int i = 0; i < 1000; i++)
{
    printf("%d", fun(10));
}

对于纯函数,编译器可以知道它需要计算fun(10)一次且仅一次,而不是 1000 次。对于复杂的函数来说,这是一个巨大的胜利。

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

纯函数的好处 的相关文章

随机推荐

  • 类型错误:意外的关键字参数传递给优化器:learning_rate

    我正在尝试加载在 Azure VM 上训练的 Keras 模型 NC 促销版 但我收到以下错误 类型错误 意外的关键字参数传递给优化器 learning rate EDIT 这是我用来加载模型的代码片段 from keras models
  • 使用RAD清理工作空间环境的方法(基于Eclipse)

    启动 RAD7 时出现很多错误 服务器不响应类更改 有时服务器无法启动 有时 RAD 不会确认我添加到服务器的模块 这是一种越野车 我知道工作区中有元数据 是否有安全的方法来清理元数据或 RAD 其中 RAD Rational Applic
  • 检查 Elixir 中的 URL 是否有效

    我想检查给定的 URL 是否有效 最好是该 url 也能解析 首先 我将如何检查字符串有效性 即正则表达式 其次 有没有办法可以查看 URL 是否确实解析为互联网上的资源 Thanks 我不会使用正则表达式 而是使用 URI 包以文本方式验
  • 在 JSF 中使用复合组件在视图中重复组件 ID

    我在公司 继承 了一个 JSF 2 JSF 2 2 7 应用程序 并面临 java lang IllegalStateException 因为两个组件似乎具有相同的 ID 视图的结构如下 我提取了相关代码用于说明目的 它可能包含一些拼写错误
  • 仅当不通过 XCode 运行时,iOS 才会崩溃。巧合?

    我的应用程序仅在不使用 XCode 调试器运行时才会崩溃 很难跟踪 因为我无法调试 但我终于弄清楚了 这是因为对一些不属于我的对象调用了release 在我更正之前 我在这里搜索并发现了 2 个相关问题 链接如下 iOS 应用程序在设备上单
  • git 上有用于重置后的钩子吗?

    我有一些所有开发人员都必须更改的本地文件 我将文件标记为 假设未更改 但这并不能阻止它们在重置时发生更改 git 上是否有一个在 git 重置后执行的钩子 如果没有 有人对如何处理这种情况有建议吗 您可以找到以下列表Git 挂钩在这里 ht
  • 如何在 VC++ 中重新启动我自己的应用程序

    正在开发 VC 应用程序 弄清楚如何重新启动我自己的应用程序 有人可以举一些例子吗 编写一个程序 它将 等待您的应用程序终止 再次运行它 调用该程序 然后退出您的应用程序 该解决方案应用相当广泛 另外一个选择 使用特定参数调用您的应用程序
  • 使用分页集合时的 ​​Angularjs 承诺链

    我正在使用一个 REST api 它为 GET 请求提供分页响应 如下所示 count 43103 previous null next http ecoengine berkeley edu api photos page 2 resul
  • Android Studio 和 Gradle,@NotNull 参数的参数 0

    我正在尝试在 Android Studio 中使用 Gradle 制作一个应用程序 但我收到的只是以下错误消息 java lang IllegalArgumentException Argument 0 for NotNull parame
  • 将 Pandas 列表列拆分为多列

    我有一个带有一列的 Pandas DataFrame import pandas as pd df pd DataFrame teams SF NYG for in range 7 teams 0 SF NYG 1 SF NYG 2 SF
  • 多键字典,其中键顺序无关紧要

    我正在尝试创建一个以两个字符串作为键的字典 并且我希望键按任何顺序排列 myDict A B something myDict B A something else print myDict A B 我希望这段代码可以打印 其他内容 不幸的
  • 如何使用VisualVM获取每个函数花费的时间[重复]

    这个问题在这里已经有答案了 VisualVM 对我来说是一个很好但有点复杂的工具 我编写了一个具有许多功能的类 在 Eclipse 中 如何获取每个函数调用的次数以及执行过程中所花费的时间信息 其实很简单 运行您的程序 它将自动在 Visu
  • CreateFile() 返回 INVALID_HANDLE_VALUE 但 GetLastError() 为 ERROR_SUCCESS

    我正在使用打开串行端口创建文件 http msdn microsoft com en us library windows desktop aa363858 28v vs 85 29 aspx 我有一个测试用例 太复杂而无法重新分发 它始终
  • php 转 rtf,é 变为 é

    使用这个rtf类 http paggard com projects rtf generator 我看到我的特殊字符被转换 比如 becomes C3 A9 那部分可能不是问题 一旦我使用 php 标头将其放入 rtf 中 生成的字符 将被
  • 此帐户类型不允许使用访问选项。 options 参数必须为 nil。;

    我正在查看我的崩溃日志 我可以看到此崩溃 此帐户类型不允许使用访问选项 options 参数必须为零 这是我第一次遇到这样的崩溃 所以我不知道发生了什么 我对此进行了一些研究 发现这是由 Facebook SDK 引起的 但是 我不太确定它
  • 无法将类型 IEnumerable 隐式转换为 IQueryable

    模糊场景 一个人有零只 一只或多只宠物 使用 Linq to Sql 需要获得一个IQueryable给定 personID 的宠物列表 这是 ERD 中被严重破坏 屠宰 混淆的部分 Code public IQueryable
  • jquery ui 对话框停止工作 - 给出错误“无法调用未定义的方法‘mouseover’”

    我一直在我的应用程序中使用 jQuery UI 对话框 直到今天我尝试打开对话框时一切都很好 但什么也没发生 在控制台中 是 未捕获的类型错误 无法调用未定义的 鼠标悬停 方法 jquery ui js 第 162 行 and 获取数据 未
  • 设置 Doctrine2 实体属性而不检索整个关联对象

    我有一个表对象 它有 2 个外键字段 user id 和 Teacher id 为 X 表生成实体后 该实体仅包含 user 和 teacher 属性 这迫使我使用关联的对象而不是 id 因此 假设我知道我的对象的 user id 和 Te
  • 使用网页作为 C# 桌面应用程序中的 UI?

    我正在构建一个带有简单 UI 的 C 桌面应用程序 由于我熟悉 HTML CSS 并且之前有一个非常相似的应用程序基于 Web 的迭代 因此如果我可以重新使用一些现有的 HTML CSS 页面作为这个新桌面应用程序的 UI 那将是理想的选择
  • 纯函数的好处

    今天我正在阅读有关纯函数的内容 对其用法感到困惑 如果一个函数为同一组输入返回同一组值并且没有任何可观察到的副作用 则该函数被称为纯函数 e g strlen 是一个纯函数 而rand 是一种不纯的 attribute pure int f