1.单个参数
场景:需要动态的调整函数中某一个处理信息。则可以,以参数的形式接收到相关数据。
定义:def 函数名(参数名称):
函数体->函数体中,可以直接以变量的形式使用该参数。
函数的调用:函数名(参数值)
形参和实参的概念:上述定义中,“参数名称”即为形参。在调用函数的时候,传递真实数据,即为实参。
案例代码:
def test(num): print(num * 1) print(num * 2) print(num * 3) test(3)
2.多个参数
场景:需要动态调整函数体中多个处理信息时,则可以使用“逗号”做分割。接收多个参数。
定义:def 函数名(参数名称1, 参数名称2)
函数体->函数体中,可以直接以变量的方式使用所有参数。
调用:方式1->函数名(参数1, 参数2, 参数3,......)->形参和实参一一对应。
def mySum(x, y): print(x + y) mySum(1, 2)
方式2->函数名(参数名称1=参数1, 参数名称2=参数2, 参数名称n=参数n,......)->可以指明形参名称->称为“关键字参数”
不需要严格按照顺序
mySum(x=2, y=10)
3.不定长参数
场景:如果函数体中,需要处理的数据,不确定长度,则可以以不定长参数的方式接收数据。
方式1:def 函数名(*args):->形参前面加上*号,形参默认为是元组,使用的时候只加一层括号就好
函数体->函数体中,可以直接以元组变量的方式使用该参数。
使用:函数名(参数1, 参数2, 参数3, ......)
def mySum(*t): print(t, type(t)) sumi = 0 for v in t: sumi += v print(sumi) mySum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
方式2:def 函数名(**dic): ->字典
函数体->函数体重中,可以直接以字典变量的方式使用该参数。
使用:函数名称(参数名称1=参数1, 参数名称2=参数2, ......)
def mySum(**kwargs): print(kwargs, type(kwargs)) mySum(name=18, age=2)
**参数的拆包:
装包->把传递的参数,包装成一个集合,称之为“装包”
def test(*args): print(args)
test(1, 2, 3, 4, 6)
拆包->把集合参数,再次分解成单独的个体,称之为“拆包”
def test(*args): print(*args) test(1, 2, 3, 4, 6)
应用案例:
def mySum(a, b, c, d, e): print(a + b + c + d + e) def test(*args): print(args) print(*args) mySum(args[0], args[1], args[2], args[3], args[4]) mySum(*args) test(1, 2, 3, 4, 6)
应用案例2:
def mySum(a, b): print(a) print(b) def test(**kwargs): print(kwargs) # 使用两个星星进行拆包操作 # print(**kwargs) mySum(**kwargs) test(a=1, b=2)
4.缺省参数:
场景:当我们使用一个函数的时候,如果大多情况下,使用的某个数据是一个固定值,或属于主功能之外的小功能实现。则可以使用默认值->这种参数,成为“缺省参数”。
定义:def 函数名(变量名1=默认值1, 变量名2=默认值2)
函数体->函数体中,即使外界没有传递指定变量,也可以使用,只不过值给定的是默认值。
使用:函数名(变量1, 变量2)->此处如果是缺省参数,则可以不填写。
def hit(somebody="豆豆"): print("我想打", somebody) hit("阳光") hit()
5.参数注意:
值传递和引用传递:
值传递->是指传递过来的,是一个数据的副本,修改副本对原件没有任何影响。
引用传递->是指传递过来的,是一个变量的地址,通过地址可以操作同一份原件。
但是注意:
在python中,你没得选择,只有引用传递(地址传递)
但是,如果数据类型是可变类型,则可以改变原件。如果数据类型是不可变类型,则不可以改变原件。
def change(num): print(id(num)) print(num) b = 10 print(id(b)) change(b)