一步一步学Python3(小学生也适用) 第二十一篇:关键字和位置参数

上一篇我们学习了定义函数时的形参,及调用函数时的实参,以及实参与形参之间传值的原理。

这一篇开始我们学习函数的几种参数类型。

函数的定义非常简单,但我们的参数类型有以下几种。

  • 位置参数(必备参数)
  • 关键字参数
  • 默认参数
  • 不定长参数

这一篇我们将来具体讲解位置参数(必备参数)

一、位置参数(必备参数)

在调用时,实参的个数必须和形参个数一样,并具位置需要对应。我们可以理解为所传的参数必须有的,不能多也不能,否则出错。 比如形参(a,b,c,d)那么我们传入实参(1,2,3,4),那么1将传入形参a,2将传入形参b,3将传入形参c,在将传入形参4.

def sum_num(a,b,c,d):           #定义函数,需要传入四个参数
    print('实参传给a的值:',a)    #调用函数时,第一个实参传给a
    print('实参传给b的值:',b)
    print('实参传给c的值:',c)
    print('实参传给d的值:',d)
    num = a + b + c + d
    return num
sum1 = sum_num(2, 3, 4, 5)   #调用函数,并将返回的值赋给num1
print(sum1)

运行结果:

实参传给a的值: 2
实参传给b的值: 3
实参传给c的值: 4
实参传给d的值: 5
14

我们上面说这种参数是叫位置参数,即形参和实参个数一样,位置相对应传值。那么我们改变实参个数看一下,会出现什么情况:

我们将定义的函数sum_num不变,只改变调用函数时实参的个数

def sum_num(a,b,c,d):           #定义函数,需要传入四个参数
    print('实参传给a的值:',a)    #调用函数时,第一个实参传给a
    print('实参传给b的值:',b)
    print('实参传给c的值:',c)
    print('实参传给d的值:',d)
    num = a + b + c + d
    return num
sum_num(2, 3, 4)   #实参为3个,形参个数为4个

运行报错:

Traceback (most recent call last):
  File "g:/老树Python/python38_3VScode/democode/T21.py", line 9, in <module>
    sum_num(2, 3, 4)  # 实参为3个,形参个数为4个
TypeError: sum_num() missing 1 required positional argument: 'd'

上述错误提示,少了一个必须的位置参数‘d’

我们继续减少一个实参看一下。

sum_num(2, 3)   #实参为2个,形参个数为4个

运行报错:

Traceback (most recent call last):
  File "g:/老树Python/python38_3VScode/democode/T21.py", line 9, in <module>
    sum_num(2, 3)  # 实参为3个,形参个数为4个
TypeError: sum_num() missing 2 required positional arguments: 'c' and 'd'

由上两个运行报错的例子,我们的实参和形参,是从左到右对应的。

那么我们实参个数多余形参个数将会出现什么情况呢

def sum_num(a,b,c,d):           #定义函数,需要传入四个参数
    print('实参传给a的值:',a)
    print('实参传给b的值:',b)
    print('实参传给c的值:',c)
    print('实参传给d的值:',d)
    num = a + b + c + d
    return num

sum_num(2,3,5,6,7)  # 实参为5个,形参个数为4个

运行报错:

Traceback (most recent call last):
  File "g:/老树Python/python38_3VScode/democode/T21.py", line 9, in <module>
    sum_num(2,3,5,6,7)  # 实参为5个,形参个数为4个
TypeError: sum_num() takes 4 positional arguments but 5 were given

上述错误类形,是函数需要4个位置参数,但我们给了5个。

二、关键字参数

在调用函数时,我们通过"键-值"的形式加上指定,即在调用函数时,把形参作为键,实参作为值,可以使函数传参更加清晰、容易理解,也清除了位置参数的位置要求。

def say_hello(name,age):                        #两个形参name和age
    print('hello',name,'你',age,'岁了')         #print实参传入的name和age

按位置参数调用:

say_hello('LiMing',18)
运行结果:
hello LiMing 你 18 岁了

关键字参数正确调用:

say_hello(name='LiMing',age = 18)
say_hello(age=18,name='LiMing')
say_hello('LiMing',age=18)
运行的结果都是:
hello LiMing 你 18 岁了

下面我们看下关键字参数错误的方法:

def say_hello(name,age):
    print('hello',name,'你',age,'岁了')

say_hello(name='LiMing',18)

运行结果:

    say_hello(name='LiMing',18)
                            ^
SyntaxError: positional argument follows keyword argument
def say_hello(name,age):
    print('hello',name,'你',age,'岁了')
    
say_hello(18,name='LiMing')

运行结果:

Traceback (most recent call last):
  File "g:/老树Python/python38_3VScode/democode/T21.py", line 8, in <module>
    say_hello(18,name='LiMing')
TypeError: say_hello() got multiple values for argument 'name'

通过上面的代码,我们可以发现:

  • 调用函数时,全部都关键字参数时,参数顺序可以打乱。
  • 位置参数和关键字参数同时使用时,位置参数必须在关键字参数前面。否则会报错。
  • 在前面的位置参数将会实参与形参,从左到右,一 一对应。
结束语:

这篇内容主要讲了当我们定义函数后,调用函数时传入参数的两种方法,位置参数和关键字参数,及他们的混合调用。下一篇我们将继续讲默认参数和可变参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值