python可变参数_二十一:Python函数形参和实参,可变和不可变对象

2d90eda1f3a389769437bab4197f669f.png

Python函数的形参与实参

1.形参与实参

形参:顾名思义,就是形式上的参数,没有实际的意思,通过别人赋值后才有意义,相当于变量。在定义函数时,函数的参数列表中的变量就是形参。

实参:就是实际意义上的参数,是一个实际存在的参数,可以是字符串、数字等。在调用函数时,给函数传递的实际值就是实参。

2.形参与实参图解

b88e4974eb734d40db232684b6b76484.png

形参与实参图解

3.值传递与引用传递

在Python中函数参数是引用传递(而不是值传递)。需要注意的是,对于不可变类型,比如说字符串,元组,数值和函数等,因为变量不能被修改,所以运算时不会影响到变量本身。而对于可变类型,比如说列表、字典、集合、自定义的对象等,函数体中的运算有可能会更改传入的参数变量。

1.对“可变对象”进行“操作”,直接作用于可变对象本身;

2.对“不可变对象”进行修改操作,会产生一个新的对象空间,并用新的值填充这块空间。

  • 不可变对象

def add(x): # 这里的x是形参

print(f'我是形参时的x,地址是:{id(x)}')

x = x + 1 #这里的x与形参里的x不量同一个,是重新定义的(我们通过id来验证))

print(f'我是内部的x,地址是:{id(x)}')

print(x)

# 调用

x = 10

print(f'函数add的地址:{id(add)}') # add在Python也是一个对象,有对应的地址

print(f'我是调用add方法前定义的x,地址是:{id(x)}')

# 调用函数

add(x)

print(f'我是调用完add方法后的x,地址是:{id(x)}')

73c5a9746953cab21dc2078bed77c539.png

不可变类型调用过程, 可以看出, x的指向10一直没有变

  • 可变对象

对于可变类型,比如说列表,字典等,函数体中的运算有可能会更改传入的参数变量,因为传入的是地址,即对象的引用。在函数体中不创建新的对象的拷贝,而是直接修改所传递的对象。

mylist = [50,60]

def myappend(m):

print(f'list: {id(m)}') # mylist和m是指向同一个地址

m.append(100) # 由于m是可变的,不创建对象拷贝,直接修改

myappend(mylist)

print(f'mylist: {id(mylist)}')

print(mylist)

d1d76c18a8d21f766e7be9f2f62954a6.png

可变类型调用过程

19a379b9ee0fb10833f7ed6865b3dfd7.png

下篇预告:函数中的参数类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值