python中函数传参的多种方式
作者:低咒孤书语
函数的传参方式有多种,位置参数、关键字参数、缺省参数、不定长参数。不过我们最常用的可能是位置参数,接下来让我们了解一下我们的参数
一、位置参数
调用函数时,编译器会将函数的实际参数按照位置顺序依次传递给形式参数,即将第1个实际参数传递给第1个形式参数,将第2个实际参数传递给第2个形式参数,依此类推。
其实也就是传递的参数和定义的参数顺序和个数一样。
举个例子
def xuesheng(name,age,gender): print(f'学生的名字是{name},年龄是{age},性别是{gender}') #这是我们定义函数,所以我们调用时就应该按name、age、gender的顺序来 xuesheng('李华',18,'男')
输出的结果是
学生的名字是李华,年龄是18,性别是男
二、关键字参数
使用位置参数传值时,如果函数中存在多个参数,记住每个参数的位置及其含义并不是一件容易的事,此时可以使用关键字参数进行传递。关键字参数传递通过“形式参数 = 实际参数”(“键 = 值”)的格式将实际参数与形式参数相关联,根据形式参数的名称进行参数传递。
示例
def xuesheng(name,age,gender): print(f'学生的名字是{name},年龄是{age},性别是{gender}') xuesheng(name = '李华',age = 18,gender = '男')
此时调用时括号里的age = 18,name = '李华',gender = '男'的顺序是可以打乱的,输出结果都不变
学生的名字是李华,年龄是18,性别是男
当我们函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间顺序可以改变,记住位置参数是一一对应的,不要把后面的写前面来了
def xuesheng(name,age,gender): print(f'学生的名字是{name},年龄是{age},性别是{gender}') #两种都有时,前面位置参数只可能是名字,不会是年龄和性别,位置参数是有顺序的 xuesheng('李华',gender = '男',age = '18')
关键字参数作用:可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求
三、缺省参数(也称默认参数)
定义函数时可以指定形式参数的默认值,调用函数时,若没有给带有默认值的形式参数传值,则直接使用参数的默认值;若给带有默认值的形式参数传值,则实际参数的值会覆盖默认值。但要注意的时所有位置参数必须出现在默认参数之前,包括函数定义与调用。
示例
def xuesheng(name,age,gender = '男'): print(f'学生的名字是{name},年龄是{age},性别是{gender}') xuesheng('李华','18')
结果与前面还是一样,李华的输出信息没改变,如果我们在默认值那改成女,结果输出就是女(当然也可以在默认为男的时候传值进去,把他改成女)
四、不定长参数
若要传入函数中的参数的个数不确定,可以使用不定长参数。不定长参数也称可变参数,此种参数接收参数的数量可以任意改变。他的类型分为位置传递和关键字传递。
先提前说明一下*args 和 **kwargs 不是特殊的参数,只是编程人员约定的变量名字,args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。 其实并不是一定要写成 *args 和 **kwargs ,只有前面的 * (星号)才是必须的
1.位置传递
def test(*args): print(args) print(type(args)) #调用函数,传入任意个参数 test(1,2,3,'我','是','李华')
不定长参数*args用于接收不定数量的位置参数,调用函数时传入的所有参数被*args接收后以元组形式保存.
#以元组形式存在 (1, 2, 3, '我', '是', '李华') <class 'tuple'>
2.关键字参数
传入参数要以“键 = 值”的形式才会被接受
def test(**kwargs): print(kwargs) print(type(kwargs)) #调用函数,传入任意个参数 test(a = '不',b = '爱',c = '作文')
不定长参数**kwargs用于接收不定数量的关键字参数,调用函数时传入的所有参数被**kwargs接收后以字典形式保存下来。
{'a': '不', 'b': '爱', 'c': '作文'} <class 'dict'>
小结:
1 位置参数一定要按顺序
2 关键字参数必须以”键 = 值“的形式,如果和位置参数混用,位置参数一定要放前
3 缺省参数默认值一定要放最后
4 不定长参数要分清位置不定长和关键字不定长,前者以元组形式接收,"*"号不能忘,
后者以字典形式接收,"**"不能忘
到此这篇关于python中函数传参的多种方式的文章就介绍到这了,更多相关python 函数传参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!