Python的参数传递

本文深入探讨Python的参数传递机制,解释了可变类型(如list)与不可变类型(如String)在方法中的行为差异。通过实例展示了如何在方法中改变并保存参数的变化,包括返回操作结果和使用可变类型作为包装器。
摘要由CSDN通过智能技术生成

Python的参数传递概述

根据Python的官方文档,Python中的参数传递机制是所谓的pass by assignment。理解这个pass by assignment需要从两个层次去考虑:
1. 被传递的参数实际上是对象的引用(但这个引用是以值的形式传递的)。
2. 有的对象是可变类型,有的对象是不可变类型。

那么:

  • 如果我们向一个方法中传递一个可变类型,该方法得到的是这个可变类型的对象的引用。我们可以在该方法中修改这个对象的内容。但是如果改变该变量所对应的引用,比如将一个新的对象赋值给该变量,在该方法之外就无法得知这种改变了。在该方法结束返回之后,方法之外的原变量所对应的仍然是原来的对象。
  • 如果我们向方法中传递了一个不可变类型,我们仍然可以重新给该变量赋值,但是方法结束之后,方法外的原变量不会有任何变化。

下面的例子清楚地说明了上面几种情况。

传递可变类型 —— 以list为例

在方法中改变参数内容

def pass_mutable_object(input_list):
    print('input list is ', input_list)
    input_list.append(4)
    print('changed input list to ', input_list)

input_list = [1, 2, 3]

print('before the function', input_list)
pass_mutable_object(input_list)
print('after the function', input_list)

上述代码的执行结果为:

before the function [1, 2, 3]
input list is [1, 2, 3]
changed input list to [1, 
Python中,函数的参数传递主要有五种形式:位置传递、关键字传递、默认值传递、不定参数传递(包裹传递)和解包裹传递。位置传递是指按照参数的位置顺序进行传递,关键字传递是指通过参数名进行传递,而不关心参数的位置。默认值传递是指在函数定义时为参数设置默认值,如果调用函数时没有传入对应参数的值,则使用默认值。不定参数传递(包裹传递)是指可以接收任意个数的参数,这些参数会被封装成一个元组或字典进行传递。解包裹传递是指将元组或字典中的元素拆分为单独的参数进行传递。这种传递方式通常使用*和**操作符来实现。例如,在调用函数时使用*args,表示将args拆分成分散的元素,分别传递给对应的位置参数。解包裹传递在函数调用时非常有用,能够方便地传递不同数量的参数。如果在调用函数时没有使用解包裹传递,而是直接传递整个元组或字典给对应的参数,那么整个元组或字典将被视为一个参数进行传递。因此,在使用解包裹传递时需要注意使用*和**操作符来拆分元组或字典的元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python 函数传递参数的多种方法](https://blog.csdn.net/dingmizhan4619/article/details/101732903)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耀凯考前突击大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值