相关疑难解决方法(0)

什么时候"i + = x"与Python中的"i = i + x"不同?

我被告知+=可以有不同于标准符号的效果i = i +.有没有在这情况下i += 1会从不同i = i + 1

python operators

210
推荐指数
3
解决办法
5万
查看次数

增加int对象

有没有办法在python中增加int对象,int似乎没有实现,__iadd__所以+ = 1实际上返回一个新对象

>>> n=1
>>> id(n)
9788024
>>> n+=1
>>> id(n)
9788012
Run Code Online (Sandbox Code Playgroud)

我想要的是保持指向同一个对象.

目的:我有从int派生的类,我想为该类实现C类型'++ n'运算符

结论:好的,因为int是不可变的,没有办法,看起来我将不得不写这样的东西

class Int(object):
    def __init__(self, value):
        self._decr = False
        self.value = value

    def __neg__(self):
        if self._decr:
            self.value -= 1
        self._decr = not self._decr
        return self

    def __str__(self):
        return str(self.value)

    def __cmp__(self, n):
        return cmp(self.value, n)

    def __nonzero__(self):
        return self.value

n = Int(10)
while --n:
    print n
Run Code Online (Sandbox Code Playgroud)

python int

14
推荐指数
4
解决办法
1万
查看次数

为什么引用相同的常量会占用C++中不同的内存空间?

我对C++中引用的想法不熟悉,我有一个关于引用纯数字常量的内存分配的问题.(我想先检查的另一件事是我怀疑const引用,我经常遇到它,意味着引用const,但我不确定.)

这是我在ideone.com上的测试:

#include <stdio.h>

int main() {

    const int r0 = 123;
    const int &r1 = 123;
    const int &r2 = 123;
    const int &r3 = r2;

    printf("%p\n", (void *)&r0);
    printf("%p\n", (void *)&r1);
    printf("%p\n", (void *)&r2);
    printf("%p\n", (void *)&r3);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

0x7ffee3bd74c4
0x7ffee3bd74c8
0x7ffee3bd74cc
0x7ffee3bd74cc
Run Code Online (Sandbox Code Playgroud)

原因与此答案清楚r2相同- C++参考如何看待内存?,这说它取决于编译器.但是我在想,为什么编译器不也令,,都是一样的,因为所有具有相同的纯恒定值.(如果没有错误的搜索,则称为prvalue)r3r0r1r2123

作为一个注释:经过对该网站的一些搜索,我发现了一个最相关的问题 - 但在python中.虽然不同的语言,但我认为这个想法应该是相同/相似的:从链接,如果我的程序是用python编写的,那么123在内存空间中只有一个用于节省空间.

我读过的其他一些答案:

  1. C++做引用占用内存:这个答案表明如果有必要那么int &x实现为*(pointer_to_x) …

c++ reference

3
推荐指数
1
解决办法
165
查看次数

标签 统计

python ×2

c++ ×1

int ×1

operators ×1

reference ×1