函数的参数
- 函数的参数可以增加函数的通用性
# 没有函数参数的函数
def num_add():a = 1b = 2return a + bs1 = num_add()
print(s1)
# 局限性:只可以计算两个数字的和,无法实现具有较高的通用性
# 没有函数参数的函数
def num_add(a, b):return a + bs = num_add(1, 1)
s1 = num_add(5, 4)
print(s)
print(s1)
参数的两种称谓
- 形参(形式参数)
- 函数定义时,制定的参数叫做形参
- 实参(实际参数)
- 函数调用时,传递的参数叫做实参
- 而我们通常讨论的参数,指的都是形参(形式参数)
- 参数的传递
函数调用的过程:
1.实参给形式参数传值
2.执行函数体
实际参数给形式参数传递的内存地址
参数的类型
- 参数的不同类型
- 定义函数时,参数的名字和位置定下来,函数 的接口就固定了。对于含糊的额调用者来说,只需要传递正确的参数,以及函数的返回什么样的制就够了,函数的内部逻辑被封装起来,调用者无需了解,python函数的参数定义灵活度非常大。
除非正常定义的位置参数外,还可以使用 :- 位置参数(重点说明)
- 默认参数
- 动态参数
- 定义函数时,参数的名字和位置定下来,函数 的接口就固定了。对于含糊的额调用者来说,只需要传递正确的参数,以及函数的返回什么样的制就够了,函数的内部逻辑被封装起来,调用者无需了解,python函数的参数定义灵活度非常大。
位置参数
也叫必传参数或者顺序参数,是最重要的、也是必须在调用函数中明确提供的参数!位置参数必须按先后顺序,一一对应,个位不多不少的传递!
def add(a, b, c): # 三个形式参数return a + b + c
x = 4
y = 5
# 形式参数和实际参数的数量是相同的
r1 = add(x, y, x) # 实际参数
# 并且参数的顺序要保持一致
r2 = add(4, 5, 6)
print(r1, r2)
当只给函数赋两个值时候出现报错
以上的错误的原因是因为字符串和 数字类型不能相加而不是因为不能够传递字符串类型的数据
注意:python在做函数参数传递的时候不会对数据类型进行检查,理论上你传什么值都可以!
默认参数
在函数定义的时候,如果一个参数提供一个默认值,这个参数就变成了默认值,不再是一个位置参数了,在调用函数的时候,我们可以给默认参数一个自定义的制,也可以使用默认值。
# 默认参数
def power(x, n=2):return x * n
pw = power(2)
pw1 = power(2, 6)
print(pw, pw1)
# 默认参数一定要放在位置参数的后面
面试题
动态参数
- 顾名思义,动态参数就是传入个数是动态,可是是1个、2个到任意个,还可以是0个,在不需要的时候,你完全可以忽略动态函数不用它传递任何值。
- python的动态参数有两种,分别是:
- *args
- ** kwargs
这里面的关进是一个和两个星的区别,而不args和kwargs 在名字上的区别
动态参数必须放在位置参数和默认参数的后面
*args
def func(*args): # *是必须存在的但是args可以换成其他,但是一般情况下不换print(args) # 返回的是一个元组
func(1, 2, 3)
** kwargs
def func(**kwargs):print(kwargs) # 返回值是一个字典
# func(k1=1, k2=2, k3=3)
dic = {"name": "yujinlong","age": 18
}
func(**dic) # 如果想要实际参数中接受字典需要在参数中写入两个“*”