关于参数,咱们会讲形式参数、实际参数、位置参数、关键字参数、默认参数以及不定长参数:
首先我们先来了解什么是参数:
比如我们定义一个函数:def add(a,b):
那么a,b就是参数,也是两个没有被赋值的变量,被称为形式参数,简称形参。
形式参数函数的作用:
会使运行重复的代码,把会变动的数据放到参数当中,其实形参就是占坑的变量。
形式参数:那么我们说形参是没有被赋值的变量,那什么时候会被赋值呢,其实就是函数被调用的时候,形参就会被赋值了。
实际参数:那么函数调用的时候,就是实参。
例如:
def add(a, b): #定义函数,a,b是形参
c = a + b
d = c * a #函数体
return d #返回值
#此时是调用函数
print(add(1, 2)) # 函数调用的时候给形式参数赋值
# 1,2 就是给形参的赋值,也叫实际参数
上面的例子,我们讲到了形参和实参,接下来我们讲一下位置参数
位置参数:位置参数就是参数之间的对应关系,也就是说形式参数和实际参数的位置要一一对应。
例如:
下面这个函数实际运行的结果,肯定是不一样的,就是因为形式参数和实际参数的位置要一一对应,而且形式参数有几个,实际参数就要有几个,不能多,不能少,否则就会报错
def add(a, b):
c = a + b
d = c * a
return d
print(add(1, 2))
print(add(2, 1))
以上实例运行结果:
3
6
关键字参数:当我们调用的时候,可以通过变量名去指定函数的实际参数。
这样做的好处是因为:
1.不需要位置一 一对应了, 因为当参数多了的时候,记住参数的位置是很困难的。
2.代码的可读性更强
例如:
def add(a, b):
c = a + b
d = c * a
return d
print(add(b=3, a=2))
以上实例运行结果:
10
默认参数:是在函数定义的时候,给形式参数一个默认的值,如果当在调用的时候没有改形式参数赋值,就会使用默认值,默认参数必须在形式参数后面。
例如:
def add(a, b=1):
c = a + b
d = c * a
return d
print(add(8,3)) #更改默认值b=1为b=3
print(add(8)) #默认b=1
# print(add(8, a=3))
#a = 8 和a对应,第二参数应该是b的,但是此时有给了 a=3 所以矛盾了。运行结果就会报错
不定长参数:
* 表示位置参数的不定长参数:
1)长度不固定, 剩下的我全要(垃圾桶),也就是接受所有剩下的位置参数;
2)他是将多个数据放到一个变量,最后以元组的类型展示。
例如:
def add(a, *b):
print("a:", a)
print("b:", b)
add(4,5,6,7,8)
以上实例运行结果:
a: 4
b: (5, 6, 7, 8)
** 关键字不定长参数:
与 * 不同的是 ** 得到的是字典,不定长是函数定义的时候去接受多个值。
例如:
def minus(a, **kw):
print(a)
print(kw)
name = "jinyan"
# a = name
info = {"age": 18, "gender": "男"}
# minus(name, age=18, gender="男")
minus(name, **info)
以上实例运行结果:
yuz
{'age': 18, 'gender': '男'}
在来一个综合一点的例子:
def add(a, *b, c, **kw):
print("a:", a)
print("b:", b)
print("kw:", kw)
add(4,5,6,7,8, c=9, d="hello")
以上实例运行结果:
a: 4
b: (5, 6, 7, 8)
kw: {'d': 'hello'}