python函数中参数定义的顺序:必选参数、默认参数、可变参数和关键字参数
形参和实参
形参:定义时小括号中的参数,用来接收参数用的称为“形参”,大白话就是:形式参数
实参:调用时小括号中的参数,用来传递给函数用的,称为“实参”,大白话就是:实际参数
def test(a,b):
c=a+b
print(c)
test(3,4)
在这个函数中a,b分别为形参。3和4就是实参
默认参数和可变参数
说默认参数和可变参数之前先说说可变和不可变数据类型
可变数据类型:数据类型的对应变量的值发生了改变,对应的内存地址不发生改变,就称为可变数据类型。
不可变数据类型:数据类型的对应变量的值发生改变,对应的内存地址也发生改变称为不可变数据类型。
人话就是:变量的值改变,内存地址发生改变就是不可变类型,内存地址不发生改变就是可变数据类型。
关键点在于不可变数据类型指的是相同的值无论有多少个变量指向它,变量的id都是相同的
而可变数据类型则是相同的值无论有多少个变量指向它,它们的id也不相同。
python 中不可变的数据类型:数字int、字符bytes、字符串string、元组tuple,布尔bool,
可变数据类型:集合set,列表list和字典dict
默认参数:
定义:为参数指定默认值,可以在调用函数时省略。如果有很多默认参数,调用时只想传入几个,就指定参数名进行传入,不指定的参数使用默认的值。
注意:如果你的默认值是一个可变对象,你需要在函数体内部定义它,这样才不会因为默认参数被改变而对下次函数调用产生影响.
注意:调用含有默认参数的函数时,若有多个默认参数,调用时传递实参没有指定参数名,按从左往右挨个传参。
警告
默认值只会执行一次,这条规则在默认值为可变对象(列表、字典以及大多数类的实例)时很重要。建议默认参数尽量使用不可变对象!!
def canshu(a,b=[]):
b.append(a)
return b
print(canshu(3))
print(canshu(4))
print(canshu(5))
结果:
[3]
[3, 4]
[3, 4, 5]
我们可以看到b被上一次函数的结果影响,所以我们要避免这种情况,在函数体内部定义它,这样才不会因为默认函数改变而对下次函数调用产生影响.
所以上方函数可以写为
def canshu(a,b=None):
if b is None:
b = []
b.append(a)
return b
print(canshu(3))
print(canshu(4))
print(canshu(5))
结果:
[3]
[4]
[5]
可变参数
可变参数
定义:可变参数用"*"号表示,传入的元素会被打包成一个tuple(元组).
关键字参数
定义:如果你想参数被打包成一个字典,你需要用到关键字参数,关键字参数用"**"表示。
总结
元组方式传参(*args) :元组方式传参一定要和参数的顺序保持一致。
字典方式传参(**kwargs):字典方式传参字典中的key一定要和参数名保持一致。
欢迎各路大佬指点,诚心求教,有啥不足之处请指出,我补充。有啥错误之处请指出,我改正