Python参数传递

    xiaoxiao2025-08-30  13

    Python参数传递机制

    Python参数传递不改变所传递对象的状态改变所传递对象的状态小结 C++传值机制值传递指针参数引用参数总结 个人写的笔记,很菜的,希望没人看见哈哈哈哈

    Python参数传递

    最近在看python的教程,看到函数传递参数这一块,写点笔记巩固一下。

    不改变所传递对象的状态

    python的传值机制均属于**“值传递”**,也就是说,在传入参数时,系统会自动创建所要传入的参数的一个副本,在函数里所做的操作都是对该副本的操作,因此不会影响到原有参数的状态。 如书上例题:

    def swap(a,b): #交换a,b的值 a,b=b,a print("在swap函数里,a值是",a,";b值是",b) a=6 b=9 swap(a,b) print("交换后a的值是",a,";b的值是",b)

    运行后得到: 可以看到原有的a,b都没有被改变 但是有时候,我们所定义的函数就是想对传递的参数作出一些改变,比如改变数组内部的排列,那该如何呢?

    改变所传递对象的状态

    为了对传入参数作出改变,我们可以利用可变对象如列表、字典来实现这一操作。 如书上例题:

    def swap(zd): #交换a,b的值 zd['a'],zd['b']=zd['b'],zd['a'] print("在swap函数里,a值是",zd['a'],";b值是",zd['b']) zd={'a':6,'b':9} swap(zd) print("交换后a的值是",zd['a'],";b的值是",zd['b'])

    运行后得到: 可以看到此时传入参数发生了改变(对应的值被交换了),这是因为字典(或者列表)里有多个对象,因此此时的字典名(或者列表名)是一个引用变量(相当于一个指针),因此如值传递的机制一样,函数所传入的参数也是这个引用变量的复制。 但是此时在该副本操作和在原有变量操作的效果是一样的,都是对该指针所指的对象进行操作,也就是说,在程序中始终只有你所定义的这个字典,但是有两个引用变量指向它(你创建一个,函数复制了一个),通过这两个引用变量去操作指向的对象效果是一样的。

    小结

    当你创建一个对象后,如果你所定义的函数只是想将该对象作为中介去得到结果,而不是改变该对象,那就直接传入;而如果你定义的函数是想改变该对象,那你可以将其变为字典或者列表再传入。 看到这里,想起以前上过的C++的传值机制,顺便复习了一下

    C++传值机制

    c++里有三种传值机制:值传递,指针参数,引用参数。

    值传递

    这种方式和上面Python所说的第一部分内容是一样的,这里就不说了。

    指针参数

    这种方式本质上也是值传递,只不过传入的是对象的地址,这时候就和上文Python肚儿部分内容一样了,如果有几个指针指着同个对象,不管你通过哪个指针去修改所指向的对象,其效果都是一样的。

    引用参数

    这种方式是C++推荐的方式,可惜以前就是学不会… 语法上是:类型 函数名(类型&) 这是在程序中你需要把实际参数的标识名作为参数传入,个人认为只是为了和值传递的语法区分开来。 这种方式其实就是在实际参数上做操作,但是与值传递不同的是它不用开辟新空间,与指针参数不同是不用通过间址访问对象,写起来比较方便?

    总结

    值传递和指针参数和上述Python所描述的内容一致。引用参数则是在实际参数上做操作,不同开辟新空间,同时不用使用间址访问对象(可能对新手友好一点,毕竟指针容易懵逼)。

    最新回复(0)