我已经在python中编写了一个verilog(逻辑门及其连接描述)模拟器作为实验的一部分.
我遇到了堆栈限制的问题,所以我做了一些阅读,发现Python没有"尾调用优化"功能(即随着递归的进行动态删除堆栈条目)
我在这方面主要有两个问题:
1)如果我提高了堆栈限制,sys.setrecursionlimit(15000)它是否会影响性能(内存 - 我不在乎)?
2)我有什么方法可以绕过这个限制,假设我可以没有堆栈跟踪.
我问这个是因为Verilog主要处理可以使用递归函数以优雅方式实现的状态机.
另外,如果我可以添加,在递归函数调用的情况下,如果有错误,我更依赖于导致此错误的输入而不是堆栈跟踪.
我是Python新手,所以也许专家可能认为Python堆栈跟踪对于调试递归函数调用非常有用......如果是这种情况,我会非常乐意学习如何做到这一点.
最后,建议在Python中编写递归函数还是应该转移到其他语言?
如果有任何解决方法,我可以继续使用python进行递归函数,我想知道是否有任何性能影响(我可以做分析).
听起来我错过了一些非常简单的东西,我试图在我的python代码中使用以下命令设置断点:
if(some condition):
pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
我的代码中的错误是在大量迭代之后出现的......难以使用print等进行调试.当条件命中时我能够打印东西但是我想设置brk-pt.
- 编辑 -
实际代码:
import pdb
if (node_num == 16):
print node_num
pdb.set_trace()
Run Code Online (Sandbox Code Playgroud) 我需要在Perl中将数字从十进制转换为二进制,其中我的约束是二进制数宽度由变量设置:
for (my $i = 0; $i<32; $i++)
{
sprintf("%b",$i) # This will give me a binary number whose width is not fixed
sprintf("%5b",$i) # This will give me binary number of width 5
# Here is what I need:
sprintf (%b"$MY_GENERIC_WIDTH"b, $i)
}
Run Code Online (Sandbox Code Playgroud)
我可以在我的打印语句中使用解决方法,但如果我可以执行上述操作,代码将更加清晰.
我正在尝试使用CPAN模块: Math::Vector::Real::Neighbors
我看到以下错误消息:
无法通过/usr/local/share/perl/5.14.2/Math/Vector/Real/Neighbors.pm第12行中的包"Math :: Vector :: Real"找到对象方法"box".
所以,我进入包中看到这个: my ($bottom, $top) = Math::Vector::Real->box(@_);
接下来,我进入Real.pm包裹:/usr/local/share/perl/5.14.2/Math/Vector/Real.pm
我看到盒子例程存在于其中: sub box {...
知道为什么错误可能会出现吗?