功能与脚本:速度

18视图(30天)
亚历桑德罗·D
亚历桑德罗·D 2018年6月26日
评论道: 史蒂文的主 2018年6月27日
亲爱的所有,
我的代码的结构如下:
* *版本一个* * * * * * * * * * * * * *
= fun1输出(输入)
一块直接编写的代码
这个函数
结束
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *版本B * * * * * * * * * *
= fun1输出(输入)
%同一段代码
%在脚本中,调用的函数
运行(“script1”)
结束
两个版本给完全相同的结果,但版本要快得多。我认为版本B是更好的代码可读性(我更喜欢打破小块中的代码),所以我想知道是否有人知道为什么版本B是慢
谢谢! !
1评论
Stephen23
Stephen23 2018年6月27日
编辑:Stephen23 2018年6月27日
“为什么版本B是慢”
不包括任何可能影响JIT优化,很合理 B 会慢一些。比较:
答:
  1. 搜索MATLAB函数文件的路径fun1
  2. 运行函数代码
B:
  1. 搜索MATLAB函数文件的路径fun1
  2. 运行函数代码
  3. 搜索MATLAB脚本文件的路径script1
  4. 运行脚本代码使用魔法运行
注意,脚本应该避免。脚本很有趣去玩弄,但是需要高效的代码,测试,和可重复的将使用函数(或类)。

登录置评。

接受的答案

强迫症
强迫症 2018年6月27日
很高兴你考虑编码实践和优化。
版本B是糟糕的时间,调试和编程实践。版本B进入你的“以”变量 fun1 本地工作区,很难弄清楚哪里出了问题。您还必须使用 运行 函数,它本身就是一个函数,使用 evalin 函数本身是一个复杂和缓慢的功能。而不是“script1”,使它成为一个函数本身。
函数= fun1输出(输入)
一个= script1(输入);
输出= + 1;
结束
版本B的问题:
你有2个脚本:
script1。m包含:
= 2;
script2。m包含:
一个= 1:10
b =一个;
结束
函数= fun1输出(输入)
运行(“script1”)
运行(“script2”)
输出=;%你指的是哪一个?一个是从哪里来的?= 10。糟糕,忘记script2使用“a”。
结束
2的评论
史蒂文的主
史蒂文的主 2018年6月27日
如果script1只需要从内部被称为fun1,考虑fun1内嵌套函数。如果你这样做,它可以“共享”与fun1变量。
如果需要从内部调用fun1和其他功能,避免单调乏味的一种方法(和潜在的错误忘记或添加一个额外的一个)是把输入 结构体 数组(或对象)和通过 结构体 之间的功能。

登录置评。

答案(1)

约翰D 'Errico
约翰D 'Errico 2018年6月27日
选项B是一个非常糟糕的编程风格。它是缓慢的,因为你发现。它可以防止MATLAB优化你的代码的效率。
一般来说,学会避免脚本。把繁重的工作职能,尽管有时主线脚本把一切都结合在一起并不是一件坏事。你在B是最糟糕的世界。
当你学会写功能,让你的代码模块,您可以重用代码为各种不同的问题。收益的编程时间,为您的下一个项目。它帮助您调试代码,因为你的工作在一个小函数。每个部分正确,那么担心下一部分。
选项B对可读性更好吗?为什么会如此?抱歉,但不是真的。学习编写和使用功能。你的代码会更好,尤其是当你开始编写模块代码。
1评论
1月
1月 2018年6月27日
+ 1。完全正确。喜欢的功能。更好,更快,更可靠,更易于调试和维护。

登录置评。

类别

找到更多的在循环和条件语句帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!