GVKun编程网logo

`xrange(2 ** 100)`-> OverflowError:long int太大而无法转换为int(long int大小)

18

对于`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大小)

`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

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开发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

ANTLR4解析期间发生StackOverflowError

问题出在设置范围运算符(又名“破折号”)上。要将范围运算符包括为文字,您必须对其进行转义

STRING_VALUE: '\'' [a-zA-Z0-9\-/ ]+ '\'' ;

或将其指定为集合中的最后一个成员项。

DATE_VALUE  :  [0-9-]+ ;

BigInteger的StackOverflowError计算阶乘?

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。还有其他方法可以处理吗?

我们今天的关于`xrange2 ** 100`-> OverflowError:long int太大而无法转换为int的分享就到这里,谢谢您的阅读,如果想了解更多关于android – 从onDraw()调用getDrawingCache()时的StackOverflowError、android开发java.lang.StackOverflowError、ANTLR4解析期间发生StackOverflowError、BigInteger的StackOverflowError计算阶乘?的相关信息,可以在本站进行搜索。

本文标签: