python变量名在引用前必须赋值,python输出语句中引用变量
引言:
对于刚接触Python的同学来说,可能不太了解Python中参数赋值的机制:在Python中,对一个变量的赋值,实际上是修改了数据的引用。。这里有一些例子来帮助解释这个机制。
首先我们来证明一下,对于变量的赋值实际上是修改了数据的引用这个描述:
从ipython的运行结果可以看出,在给变量赋值的时候,其实只是给变量A的一个标签(数据引用),类似下图。
当被赋值变量A赋给另一个新变量B时,实际上新变量B仍然是被赋值变量A对应的常数10的一个标签,类似下图。
所以当我们改变A的值时,我们不会改变B的引用,而只是简单地将A改变为新值20的引用。这时,对应的示意图如下
函数参数的传递:
结论:这是Python中函数参数传递不同于其他语言的地方。它传递对应于参数的引用,而不是对应于参数的值。
我们使用一个测试程序来帮助说明:
【注:id函数返回的结果【注:python是该参数对应的内存地址】
def printID(para):print(输入para的ID为{} 。format(id(para)))para=10 print( 10的id是{} 。format(ID(para)))printID(para)-输出结果:10的id是1746174320输入para的id是1746174320。可见,传参数的时候,真的是引用。
函数返回值的传递:
结论:函数在传递返回值的同时,也传递了该参数对应的数据的引用。
我们使用一个测试程序来帮助说明:
def printID():r=2print(2的id={} )。format(id(2)))返回rr=printID()print(r的id={} 。format(id(r))) -输出结果:2的ID=1746174064R的ID=1746174064。可以看出,函数的返回值实际上传递的是这个参数对应的数据。
函数内部参数值的修改:
结论:如果在函数中修改传入的参数,只会在函数中生效,不能改变传入的参数值:
我们使用一个测试程序来帮助说明:
def test(num):num=10 print( function的num={} )。format(num))GL _ num=1 test(GL _ num)print( num={ } 。format(gl_num)) -输出结果:函数的编号=10gl_num=1。为了便于更好的理解,我将用下图来说明:
当函数中的语句num=10没有执行时,两个“标签”:num和gl_num的引用图是红线。执行num=10时,num指向10对应的内存地址,而gl_num指向的地址保持不变。此外,这也能从另一方面说明,函数中传递的参数与实参并不是同一个"标签",只是对于某一个地址的两个不同的"标签"。
如果觉得我有地方讲的不好的或者有错误的欢迎给我留言,谢谢大家阅读(点个赞我可是会很开心的哦)~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。