实参和形参

本文详细解释了函数中形参和实参的概念及其工作原理。包括形参的内存分配与释放、实参的有效性和类型一致性要求,以及不同参数传递机制如值传递与引用传递的区别。

1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。

4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。

在Python中,实参形参是函数编程中的重要概念。定义函数时,圆括号内使用逗号分隔的形式参数列表即为形参;调用函数时向其传递的参数则是实参实参的值或引用会被传递给形参[^1]。 两者存在多方面区别: - **定义位置**:形参在函数定义时声明,用于接收函数调用时传递的实参值,在函数体内部使用,定义了函数期望的输入类型数量;实参在函数调用时传递给函数,可以是常量、变量、表达式或其他函数调用的结果,用于初始化函数内部的形参[^4]。 - **作用范围**:形参作用范围仅限于函数内部,函数被调用时,形参会被实参初始化,函数执行完毕后,形参作用范围结束,占用的内存会被释放;实参的作用范围取决于自身定义位置,可以是全局变量、局部变量或其他函数作用范围内的变量,函数执行完毕后,实参作用范围不受影响[^4]。 - **命名顺序**:函数定义时,形参的名称顺序固定,确定了函数期望的输入类型数量;函数调用时,实参顺序通常需与形参顺序匹配,除非使用关键字参数,使用关键字参数时可按任意顺序传递实参,只需提供正确参数名即可[^4]。 - **传递方式**:在Python中,所有数据类型都通过值传递,但对于可变数据类型(如列表、字典等),传递的是引用的值,函数内部对可变数据类型的修改会影响原始数据;对于固定数据类型(如整数、浮点数、字符串、元组等),在函数内部直接修改形参的值不会影响实参[^1][^4]。 实参形参的使用方法示例如下: ```python # 1. 定义具有形参的函数 def greet(name, age): print(f"Hello, {name}! You are {age} years old.") # 2. 调用函数并传递实参 greet("Alice", 30) # 输出:Hello, Alice! You are 30 years old. # 3. 传值示例 def ChangeInt(a): a = 10 a = 2 ChangeInt(a) print('a =', a) # 输出:a = 2 # 4. 传引用示例 def changeme(mylist): mylist.append([1, 2, 3, 4]) print("函数内取值: ", mylist) mylist = [10, 20, 30] changeme(mylist) print("函数外取值: ", mylist) # 输出: # 函数内取值: [10, 20, 30, [1, 2, 3, 4]] # 函数外取值: [10, 20, 30, [1, 2, 3, 4]] # 5. 位置形参 + 默认形参示例 def basic_args(a, b = 10): print(f"a={a}, b={b}") basic_args(1) # 输出:a=1, b=10 basic_args(1, 2) # 输出:a=1, b=2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值