对于`xrange感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍2**100`->OverflowError:longint太大而无法转换为int,并为您提供关于android–从onDraw
对于`xrange感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍2 ** 100`-> OverflowError:long int太大而无法转换为int,并为您提供关于android – 从onDraw()调用getDrawingCache()时的StackOverflowError、android开发java.lang.StackOverflowError、ANTLR4解析期间发生StackOverflowError、BigInteger的StackOverflowError计算阶乘?的有用信息。
本文目录一览:- `xrange(2 ** 100)`-> OverflowError:long int太大而无法转换为int(long int大小)
- android – 从onDraw()调用getDrawingCache()时的StackOverflowError
- android开发java.lang.StackOverflowError
- ANTLR4解析期间发生StackOverflowError
- BigInteger的StackOverflowError计算阶乘?
`xrange(2 ** 100)`-> OverflowError:long int太大而无法转换为int(long int大小)
xrange
函数不适用于大整数:
>>> N = 10**100>>> xrange(N)Traceback (most recent call last):...OverflowError: long int too large to convert to int>>> xrange(N, N+10)Traceback (most recent call last):...OverflowError: long int too large to convert to int
Python 3.x:
>>> N = 10**100>>> r = range(N)>>> r = range(N, N+10)>>> len(r)10
range()
python 3.x是否有py3k内置函数的反向端口?
编辑
我正在寻找“ lazy”的完整实现range()
,而不仅仅是其某些功能的部分实现。
答案1
小编典典好的,这是更全面的实现。
class MyXRange(object): def __init__(self, a1, a2=None, step=1): if step == 0: raise ValueError("arg 3 must not be 0") if a2 is None: a1, a2 = 0, a1 if (a2 - a1) % step != 0: a2 += step - (a2 - a1) % step if cmp(a1, a2) != cmp(0, step): a2 = a1 self.start, self.stop, self.step = a1, a2, step def __iter__(self): n = self.start while cmp(n, self.stop) == cmp(0, self.step): yield n n += self.step def __repr__(self): return "MyXRange(%d,%d,%d)" % (self.start, self.stop, self.step) # NB: len(self) will convert this to an int, and may fail def __len__(self): return (self.stop - self.start)//(self.step) def __getitem__(self, key): if key < 0: key = self.__len__() + key if key < 0: raise IndexError("list index out of range") return self[key] n = self.start + self.step*key if cmp(n, self.stop) != cmp(0, self.step): raise IndexError("list index out of range") return n def __reversed__(self): return MyXRange(self.stop-self.step, self.start-self.step, -self.step) def __contains__(self, val): if val == self.start: return cmp(0, self.step) == cmp(self.start, self.stop) if cmp(self.start, val) != cmp(0, self.step): return False if cmp(val, self.stop) != cmp(0, self.step): return False return (val - self.start) % self.step == 0
和一些测试:
def testMyXRange(testsize=10): def normexcept(f,args): try: r = [f(args)] except Exception, e: r = type(e) return r for i in range(-testsize,testsize+1): for j in range(-testsize,testsize+1): print i, j for k in range(-9, 10, 2): r, mr = range(i,j,k), MyXRange(i,j,k) if r != list(mr): print "iter fail: %d, %d, %d" % (i,j,k) if list(reversed(r)) != list(reversed(mr)): print "reversed fail: %d, %d, %d" % (i,j,k) if len(r) != len(mr): print "len fail: %d, %d, %d" % (i,j,k) z = [m for m in range(-testsize*2,testsize*2+1) if (m in r) != (m in mr)] if z != []: print "contains fail: %d, %d, %d, %s" % (i,j,k,(z+["..."])[:10]) z = [m for m in range(-testsize*2, testsize*2+1) if normexcept(r.__getitem__, m) != normexcept(mr.__getitem__, m)] if z != []: print "getitem fail: %d, %d, %d, %s" % (i,j,k,(z+["..."])[:10])
android – 从onDraw()调用getDrawingCache()时的StackOverflowError
我有一个手动绘制的自定义视图.我正在将内容绘制到位图中,然后在onDraw()中使用该位图.我意识到,如果我启用绘图缓存,我可以使用该缓存而不是创建自己的位图.这主要是有效的.
目前我的onDraw方法如下所示:
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(getDrawingCache(), 0, 0, null);
}
这适用于我尝试过的模拟器.但是我在StackOverflowError上收到崩溃报告.报告看起来像这样:
java.lang.StackOverflowError
at android.view.View.getDrawingCache(View.java:10481)
at android.view.View.getDrawingCache(View.java:10446)
at com.aragaer.jtt.JTTClockView.onDraw(JTTClockView.java:162)
at android.view.View.draw(View.java:10983)
at android.view.View.buildDrawingCache(View.java:10700)
at android.view.View.getDrawingCache(View.java:10481)
at android.view.View.getDrawingCache(View.java:10446)
and so on...
我看过android源码,实际上是buildDrawingCache调用draw().这可以解释循环.但是buildDrawingCache()应该在第二次调用时立即返回.
除非设置了PFLAG_DRAWING_CACHE_VALID(source),否则不会发生这种情况.并且仅当视图附加到父级时才设置该标志,IS硬件加速AND层类型为LAYER_TYPE_NONE(source again).
问题是 – 是否可以将图层类型显式设置为not-none或者我应该使用其他方法?如果是,我应该选择哪种类型?
解决方法:
getDrawingCache()从未打算由View本身使用.它由父母管理.当View是硬件加速时未设置标志的原因是因为“绘图缓存”与硬件加速具有不同的含义.它用于控制显示列表的生命周期.即使你想要它时设置了标志,你也不会得到你想要的行为.
这里有两个解决方案:创建自己的位图或更好,只需在View上启用绘图缓存,不要从onDraw()调用canvas.drawBitmap(getDrawingCache(),…).无论如何,父母会为你做这件事!
android开发java.lang.StackOverflowError
做android开发时,发现一个关于android退出时不能彻底关闭的问题,比如:一个程序里有多个线程,这样在退出程序的可能不能完全关闭,最后发现,只用finish()方法,有时候不能彻底退出,个人感觉还是要在适当的地方加上:System.exit(0);
原因有两点:
1.this.finish()当退出页面,也许还有其他activity存在,可能还有没有结束的线程,有很多没有释放的资源。
2.Java 的 exit(int code) 方法可以退出当前程序,终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。该方法调用 Runtime 类中的 exit 方法。该方法永远不会正常返回。调用 System.exit(n) 实际上等效于调用:Runtime.getRuntime().exit(n)。
所以在推出页面的onDestroy()里面加上System.exit(0);可以解决第二次登陆java.lang.StackOverflowError异常。
ANTLR4解析期间发生StackOverflowError
问题出在设置范围运算符(又名“破折号”)上。要将范围运算符包括为文字,您必须对其进行转义
STRING_VALUE: '\'' [a-zA-Z0-9\-/ ]+ '\'' ;
或将其指定为集合中的最后一个成员项。
DATE_VALUE : [0-9-]+ ;
BigInteger的StackOverflowError计算阶乘?
我正在尝试编写一个Java程序来计算大量的阶乘。似乎BigInteger
无法容纳这么多的人。
以下是我编写的(直接)代码。
public static BigInteger getFactorial(BigInteger num) {
if (num.intValue() == 0) return BigInteger.valueOf(1);
if (num.intValue() == 1) return BigInteger.valueOf(1);
return num.multiply(getFactorial(num.subtract(BigInteger.valueOf(1))));
}
上面的程序在5022中处理的最大数量,之后该程序将抛出StackOverflowError
。还有其他方法可以处理吗?
我们今天的关于`xrange和2 ** 100`-> OverflowError:long int太大而无法转换为int的分享就到这里,谢谢您的阅读,如果想了解更多关于android – 从onDraw()调用getDrawingCache()时的StackOverflowError、android开发java.lang.StackOverflowError、ANTLR4解析期间发生StackOverflowError、BigInteger的StackOverflowError计算阶乘?的相关信息,可以在本站进行搜索。
本文标签: