Python函数传参的方式
Posted HF_SO4
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python函数传参的方式相关的知识,希望对你有一定的参考价值。
学习笔记//20230402 edit
1.传参类型
- 值传递
- 引用传递
就像C++的参数传递:
- 值传递时值把实参的值传递给function, function 内对形参的修改不会影响实参;
- 引用传递时,实参实际上传入了其地址。function内对形参的修改直接影响实参;
但是Python 跟C++ 还不一样。python 一切皆对象(object).变量并不存储value,只会指向object(即一个指针);
# var a 指向 list object:[1,2,3]
a=[1,2,3]
# var a 指向 string object:"aksoam"
a="aksoam"
2. python 的两类对象
python 中的对象可以分成两类: 可变对象 and 不可变对象 。string 、nummber 、turple 这些就是不可变对象;dict 、 list 等为可变对象。
- 传不可变对象进function 时,效果等效于值传递;
- 传可变对象进function 时,效果等效于引用传递;
对象类型判断方法:
# Number object
>>> a=12
>>> id(a)
140717063361496
>>> a=a+12
>>> id(a)
140717063361880
# String object
a=\'12\'
>>> id(a)
2290396292528
>>> a=a+\'456\'
>>> id(a)
2290396290416
可以看到,修改 var a 后,a的地址发生变化
;即为不可变对象
;
>>> a=[1,2,3]
>>> id(a)
2290398828160
>>> a.append(16)
>>> a
[1, 2, 3, 16]
>>> id(a)
2290398828160
修改 var a 后,a的地址没变
,就是可变对象
;
本文来自博客园,作者:hayden_william,转载请注明原文链接:https://www.cnblogs.com/aksoam/p/17281344.html
python函数 传参的多种方式 解读
1、函数的参数在哪里定义
在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开
案列:
2、带参数的函数调用:
函数定义了参数,那么调用函数的时候就需要传入参数
上面的案列中,我们定义函数的时候在函数名后面的括号里定义的参数叫做形参。
而我们调用函数的时候传入的参数叫做实参,形参是用来接收实参的。
参数的分类
上面我们说了形参和实参,那么形参和实参在在定义和调用的时候,根据形式不同有可以分为几类。
1、根据实参进行分类
实参:位置参数、关键字参数
1.1、位置参数(未命名参数)
上述案列中,的函数的三个形参是按位置接收传入的实参,我们把这样的传参的形式叫做位置参数。
1.2、关键字参数(命名参数)
调用函数函数的时候,实参通过参数名指定传给某个形参,这样的传参形式,我们把它叫做关键字参数。
注意:传参的时候先写位置参数,再写命名参数
2、根据形参进行分类
形参可以分为三类:必备参数、默然参数、不定长参数
2.1、必备参数:
在调用函数的时候必须要传的参数
上面函数中的a,b就是必备参数,在调用的函数的时候必须要传,不然就会报错。
2.2、默认参数(缺省参数):
调用函数的时候可以传可以不传,不传就用默认值
通过上述案列中我们可以发现,第一次调用的时候,我们传入了三个参数,c打印出来的是我们传入的值。
第二次只传入了两个参数,这个时候c打印出来的是我们定义的时候给它设置的默认值
注意:带有默认值的参数一定要位于参数列表的最后面。
2.3、不定长参数*args和 **kwargs
调用函数的时候可以传0个或者多个
◆ *args:接收多传入的位置参数,以元祖的形式保存
*args,args接收的是一个元祖;
调用的时候可以直接传入:
func(11,22,33,44,55,66,77),
也可以可以先组装list或tuple,
再通过*拆包传入:
func(*(11,22,33,44,55,66,77));
◆ **kwargs:接收多传入的关键字参数,以字典的形式保存
**kwargs,kw接收的是一个字典;
关键字参数既可以直接传入:
func(11,22,e=33,h=44,f=55,d=66,c=77)
也可以先组装dict
再通过**kw传入:
func(**{\'e\':33,\'h\':44,\'d\':66,\'c\':77})
注意点:使用*args和**kwargs是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
来源: https://mp.weixin.qq.com/s/p_L94CGTQdethFdGYZePBw
以上是关于Python函数传参的方式的主要内容,如果未能解决你的问题,请参考以下文章