12-python函数的传参——形参、实参、装包 *args和**kwargs

函数的参数

1 形参和实参

函数的参数:在定义函数时,可以再函数名后()中定义数量不等的形参,注意可以有也可以没有,可有一个也可有多个,多个形参之间用逗号隔开

形参(形式参数):定义形参就相当于在函数内部声明了变量,但是并不赋值

实参(实际参数):在函数定义时指定了形参,在调用的时候也必须传递实参,实参会赋值给对应的形参

# 定义函数时指定形参
def fn(a,b):
    print("a=",a)
    print("b=",b)
# 调用函数时,来传递实参
fn(10,20)
fn(666,333)
# 求任意两个数的和
def sum1(a,b):
    print(a,"+",b,"=",a+b)

sum1(111,222)
总结:定义函数时叫形参,调用函数时叫实参
定义了多少个形参就必须传递多少个实参

2 参数的传递方式

2.1 默认值参数

def fn(a, b, c=10):
    print("a=", a)
    print("b=", b)
    print("c=", c)
fn(1,2,3)

a= 1
b= 2
c= 3


def fn(a, b, c=10):
    print("a=", a)
    print("b=", b)
    print("c=", c)
fn(1,2)
a= 1
b= 2
c= 10
2.2 位置参数和关键字参数
1.位置参数
def ms(年龄,姓名,手机号,qq号,微信号,国家,省份。。。。)

ms()
2.关键字参数
可以不按照形参定义的顺序来传递,而是直接根据参数名来传递参数

def fn(a, b, c):
    print("a=", a)
    print("b=", b)
    print("c=", c)
fn(b=1,c=3,a=2)
a= 2
b= 1
c= 3
fn(1,2,c=20)  #1,2是位置参数,c=20是关键字参数

注意:混合使用关键字和位置参数的时候,位置参数必须在关键字参数的前面
可以混着写,但是必须把位置参数写在关键字参数前面

3 实参的类型

def fn2(a):
    print("a=",a)
a = 123
fn2(a)  # 实参不一定非得传值,也可以传变量

实参可以传递任意类型,什么都行,啥都行

def fn(a, b, c):
    print("a=", a)
    print("b=", b)
    print("c=", c)
# fn(b=1,c=3,a=2)
fn(1,2,c=20)  #1,2是位置参数,c=20是关键字参数

def fn2(a):
    print("a=",a)
# b= True
# b='hello'
# b = [1,2,3]
b = fn
fn2(b)

4 函数的可变参数

4.1 *args

可变参数也可以叫做不定长参数

*args是将所有的实参保存到一个元组

def sum1(*a):
    print(a)  #()
    print(type(a))  #<class 'tuple'>
sum1()
sum1(1,2,3,4,5)  #(1, 2, 3, 4, 5)
*a能接收所有的实参,并且将实参保存到一个元组中,这个操作其实就叫做装包

# 任意个数的和
def sum1(*a):
    result = 0
    for i in a:
        result+=i
    print(result)
sum1(1)
sum1(1,2)
sum1(1,2,3,4,5,7,8,9,1,4,5,5)

1
3
54
1.带星号的形参只能有一个
2.带星号的参数可以和其他的参数配合使用,但是要写在最后面
def fn(a,b,*c):
    print("a=",a)
    print("b=",b)
    print("c=",c)
fn(1,2,4,5,6,7,8,9,10)

a= 1
b= 2
c= (4, 5, 6, 7, 8, 9, 10)
def fn(*a,b,c):
    print("a=",a)
    print("b=",b)
    print("c=",c)
fn(1,2,4,5,6,7,8,9,10,b=4,c=3)

a= (1, 2, 4, 5, 6, 7, 8, 9, 10)
b= 4
c= 3

命名潜规则是*args

4.2 **kwargs

带一星号的形参有一个弊端,就是只能接收位置参数

def fn(**args):
    print("args=",args)
    print(type(args))
fn(a=1,b=2,c=3) 

args= {'a': 1, 'b': 2, 'c': 3}
<class 'dict'>

**kwargs是将所有的实参保存到一个字典

总结:
**形参可以接收任意的关键字参数,会将这些参数统一保存到一个字典中,字典的键就是参数的名字,字典的值就是参数的值
注意:
**形参,也是只能有一个,并且必须写在所有参数的最后,它必须得是最后一个,命名潜规则是**kwargs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JC03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值