当前位置: 首页 > 后端技术 > Python

python是如何传递参数的?

时间:2023-03-25 19:51:55 Python

在分析python的参数传递是如何进行的之前,我们需要了解python变量和赋值的基本原理,这有助于我们更好地理解参数传递。Python变量和赋值从几行代码开始In[1]:a=1In[2]:b=aIn[3]:a=a+1我们先给a赋1,即a指向对象1,在python中一切都是对象。那么b=a表示b也指向对象1,python中的一个对象可以被多个引用指向。最后执行a=a+1。这里需要注意int、str等Python数据类型的不可变类型。执行a=a+1操作,并没有将a指向的对象的值增加1,而是生成了一个新的对象2,并且a指向了对象2,原来的对象仍然存在于内存中。这里的话还是会指向,我们分别来看a和b的取值:In[4]:aOut[4]:2In[5]:bOut[5]:1通过这个例子,你可以看到一开始a和b只是指向同一个对象的两个变量,也可以认为是同一个对象的两个名字。一个简单的赋值b=a并不意味着重新创建一个新的对象,它只是让同一个对象被多个变量指向或引用。同时,指向同一个对象并不意味着两个变量绑定在一起。如果重新赋值其中一个变量,不会影响其他变量的值。List还有一个列表的例子,我们再看一下:In[6]:l1=[3,4,5,6]In[7]:l2=l1In[10]:l1.append(7)In[11]:l1Out[11]:[3,4,5,6,7]In[12]:l2Out[12]:[3,4,5,6,7]在代码中,我们让两个变量l1和l2都指向对象[3,4,5,6]。我们知道列表是一个可变的数据结构,所以append操作并没有产生新的对象,而是在末尾添加了一个元素,变成了[3,4,5,6,7],因为l1和l2指向同时这个列表,列表的变化会同时反映到l1和l2这两个变量上,那么l1和l2的值就会变成[3,4,5,6,7].对象删除python中的变量可以删除,但是对象是不能删除的。In[22]:a=[1,4,5]In[23]:deladel语句删除了变量a,因此无法通过a[1,4,5]访问,但是这个对象仍然存在,而python的垃圾回收机制在发现引用为0时会对其进行回收。综上所述,变量的赋值只是意味着该变量指向了一个对象,并不意味着将对象复制给了变量;而一个对象可以被多个指向可变对象(列表、字典、集合等)的变量改变,它会影响所有指向该对象的变量对于不可变对象(字符串、整数、元组等),其值所有指向该对象的变量总是相同的,永远不会改变。但是,当通过某些操作(+=等)更新不可变对象的值时,可以删除新的对象变量,但不能删除对象。python函数如何进行参数传递?Python参数传递是赋值传递或者引用传递。python中一切皆对象,所以传递参数时,只是让新变量和原变量指向同一个对象。让我们看一个例子:In[28]:deffunc(b):...:b=2In[29]:a=1In[30]:func(a)In[31]:aOut[31]:1这里传递的参数使得变量a和b同时指向对象1。但是当我们执行b=2时,系统会重新创建一个值为2的新对象,让b指向它;而a仍然指向对象1,所以a的值没有变化,还是1。如何改变a的值呢?我们可以在函数deffunc(b)中returnb:b=2returnba=1a=func(a)a2上面的例子是int类型,我们看list例子:deffunc(l2):l2.append(77)l1=[12,3,6]func(l1)l1[12,3,6,77]其中l1和l2首先指向值为[1,2,3]的列表。但是,由于列表是可变的,当执行append()函数,在末尾添加了一个新的元素4时,变量l1和l2的值也会随之变化。我们看下面的例子,结果是什么?deffunc(l2):l2=l2+[4]l1=[12,3,6]func(l1)l1[12,3,6]可以看出l1没有变,因为l2+[4]这个操作就是创建一个新的列表,最后添加元素4,让l2指向这个新对象,l1仍然指向原来的对象。总结今天,我们讨论了Python变量及其赋值的基础知识,并解释了如何在Python中传递参数。与其他语言不同的是,Python中参数的传递既不是值传递也不是引用传递,而是赋值传递,或者说是对象引用传递。需要注意的是,这里的赋值或者对象引用传递并不是指向具体的内存地址,而是指向具体的对象。本文链接:https://immortalp.com/article...欢迎大家访问我的博客,里面有更多实测内容!!