我是靠谱客的博主 自由诺言,最近开发中收集的这篇文章主要介绍[Python]Python中为什么不支持自加自减操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

博主在看某书上的python代码时产生疑问:为什么python不像c++,java一样支持变量的自加与自减操作呢?这样的话一些代码就会简洁不少,于是查找了一些资料,但是觉得都没有讲的很明白,这里把他们讲到的涉及的一些知识点介绍一下。

python与c++中数值变量存储机制的不同

我们先来看python的一段代码:

a = 5
print("
a = ",a,"地址为:",id(a))
a += 1
print("a+=1后
","a = ",a,"地址为:",id(a))
b = 5
print("
b = ",b,"地址为:",id(b))
c = b
print("
c = ",c,"地址为:",id(c))

a =
5 地址为: 140451760084256
a+=1后
a =
6 地址为: 140451760084288
b =
5 地址为: 140451760084256
c =
5 地址为: 140451760084256

我们看到a+=1之后,a所指向的存储地址已经改变了,变量b和变量c都等于5,这两个变量所指向的地址为数值5所在的地址。
我们下面来看c++的一段类似的程序:

#include <iostream>
using namespace std;
int main()
{
int a = 5;
cout <<"
a="<<a<<"地址为:"<< &a << 'n';
a++;
cout <<"a++后"<<"
a="<<a<<"地址为:"<< &a<<'n';
a+=1;
cout <<"a+=1后"<<"
a="<<a<<"地址为:"<< &a<<'n';
int b=5;
cout<< "
b="<<b<<"地址为:"<<&b<<'n';
int c = b;
cout<< "
c="<<c<<"地址为:"<<&c;
return 0;
}

a=5地址为:0x7fff6ea1ea78
a++后
a=6地址为:0x7fff6ea1ea78
a+=1后
a=7地址为:0x7fff6ea1ea78
b=5地址为:0x7fff6ea1ea74
c=5地址为:0x7fff6ea1ea70

我们这里看到有明显的不同,a++与a+=1之后变量a所指向的地址并没有改变;虽然变量b=c=5但是这两个变量所指向的地址也并不是a所指向的那个地址。
综上我们发现:
C++
1.是以变量名字来分配内存地址的,只要数值的变量名字不同,那么它们就分配不同的地址。
2.a++与a+=1的操作下a所指向的内存空间都不会改变(也不需要改变,这样设计是合理的
Python
1.Python中在某一个数值区间内会有一个整数池,无论你的整数叫什么名字,只要和池中某个整数值一样,那它俩就会分配为同一个存储空间,不同的变量名都指向了这个空间。
2.a+=1操作下,由于内容改变了,所以a所指向的内存空间也需要改变(如果所指向的内存空间不改变的话,而数值变量b也指向了这片空间,那么改变a的同时就改变了b,这不是我们希望的,所以变量a的指向必须改变,这样设计是合理的)。

最后

以上就是自由诺言为你收集整理的[Python]Python中为什么不支持自加自减操作的全部内容,希望文章能够帮你解决[Python]Python中为什么不支持自加自减操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部