【我撰写的这个系列文字版权所有,特此声明】
我是边学习边写探究。将我的上一篇”跟我一起学python | 探究02“分享给好友之后,听到很多来自好友的建议。微信公众号“老齐教室”的齐伟是我多年的好友,也是python编程研究的大咖,出版了一系列的python相关的图书。下面免费帮老齐做个广告。免费帮老齐做个广告
老齐认为对于python语言,不能把变量类比成杯子。他建议在python语言中用标签来类比变量,给数据贴标签就等于给变量赋值。i=6 j=9
老齐用两个变量交换数据的例子来说明python语言变量和C语言变量的差别。
所谓变量交换数据,就是:
python如何用程序来实现变量的数据交换的呢?
i=6
j=9
i,j=j,i
print("i=",i,"j=",j)
运行结果是 i=9 j=6,说明程序已经将变量数据交换完毕。
对于python语言而言,i , j = j , i 这行代码确实有点骚。在C语言中,这行代码没有错误,也能编译运行,但变量的数据却没有互换。运用啊哈C编写,运行结果i=6 j=9 没有交换成功
为什么python语言可以使用这个代码,而C语言却不可以呢?我带着疑问上网进行了搜索。有以下说法和观点仅供参考。Python的变量并不直接存储值,而只是引用一个内存地址,交换变量时,只是交换了引用的地址。
在C语言中,系统会为每个变量分配内存空间。而在python中,Python为每个值分配内存空间。
看懂了没?什么内存地址?什么内存空间?不懂也没有关系,反正我们知道了python语言和C语言内存空间的分配是不一样的。
因此,老齐说python的变量还是类比成贴标签比较好。老齐说得对!
那么,在C语言中,又是如何实现两个变量之间的数据互换的呢?在C语言中,我们把变量类比成杯子。
可以在两个变量中先后交换来实现吗?运用啊哈C编写
i=j 意思是将变量j的数据赋值于变量i
j=i 意思是将变量i的数据赋值于变量j
这段代码运行后的结果是什么呢? 结果是i=9,j=9。
显然,这段代码没有能够实现两个变量之间数据的互换。
是否可以用python来编写相同的代码呢?运行的结果是不是和C语言的一样呢?
【挖坑试错】
i=6
j=9
i=j #i=j就是把变量j的数据传递给变量i,此步骤后i=9
j=i #j=i 就是把此时变量i的数据传递给变量j,所以j=9
print("i=",i,"j=",j) #"i="是字符串,输出为:i=,i则是变量,因为i=9,所以输出为9
因为这段程序代码是一个顺序程序,从上向下,依次执行程序代码,所以代码运行结果也是:i=9 j=9, 两个变量的数据互换同样没有成功。
为什么python仅靠两个变量编写成的 i,j=j,i 代码就能实现变量间的数据互换呢?因为,这段代码写在了同一行同一句代码命令中,变量i、变量j的互换是同时进行的,没有先后。有先后步骤的,按照先后步骤执行代码命令,两个变量就很难实现数据的互换。
在C语言中,如何解决两只杯子倒来倒去解决不了问题的呢?
解决的办法便是再增加一只杯子(变量)。
用杯子做类比,接下来的操作容易想象和理解。
1. 将变量i的数据赋予变量k;(k变量暂时保管i变量的数据)
2. 将变量j的数据赋予变量i;(i变量数据已经换好)
3. 将变量k的数据赋予变量j。(j变量的数据也已经换好)
用c语言编写这段代码,如下图:
运行结果:i=9 j=6 两个变量数据交换成功!
我们用python写这段代码:
【挖坑试错】
i=6
j=9
k=i
i=j
j=k
print("i=",i,"j=",j)
运行结果是:i= 9 j= 6 ,i和j两个变量数据同样互换成功!
如果中间变量k不是空杯子,影响变量i和变量j的数据互换吗?
【挖坑试错】
i=6
j=9
k=100
k=i
i=j
j=k
print("i=",i,"j=",j,"k=",k)
结果:i=9 j=6 k=6 这个结果说明了什么呢?
上述参照C语言的python程序,是否可以用类比的标签来进行解释呢?这个问题同样留给思考的你。下图可供参考:
两个变量的数据交换是不是还有其它方法?有!下一课继续。