Python 位置参数、关键字参数和默认参数详解 [Python Function][Python 位置参数][Python 关键字参数][Python 默认参数]

您的“关注”和“点赞”,是信任,是认可,是支持,是动力…

如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

1 Python 位置参数

1.1 Python 位置参数概述

Python 位置参数,也称必备参数。

指的是在调用函数时正确传入函数的实际参数,传入的实际参数要与定义函数时的形式参数保持一致,具体需要满足以下要求:

  • 要求一:实参和形参数量必须一致
  • 要求二:实参和形参顺序必须一致

1.2 要求一:实参和形参数量必须一致

在调用函数,传入函数的实际参数的数量必须和定义函数时的形式参数的数量一致,传多传少 Python 解释器都会抛出 TypeError 异常,并提示缺少必要的位置参数。

举例如下所示:

例一,少传实参

def info(name, age, gender):  # name、age、gender 三个形式参数
    print('姓名:', name, ';年龄:', age, ';性别:', gender)


info('阿杰', 18)  # 少传入一个实参,会报错

运行结果:

Traceback (most recent call last):
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 5, in <module>
    info('阿杰', 18)  # 少传入一个实参
TypeError: info() missing 1 required positional argument: 'gender'

例二,多传实参

def info(name, age, gender):  # name、age、gender 三个形式参数
    print('姓名:', name, ';年龄:', age, ';性别:', gender)


info('阿杰', 18, '男', '中国')  # 多传入一个实参,会报错

运行结果:

Traceback (most recent call last):
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 5, in <module>
    info('阿杰', 18, '男', '中国')  # 多传入一个实参
TypeError: info() takes 3 positional arguments but 4 were given

1.3 要求二:实参和形参顺序必须一致

在调用函数时,传入实际参数的顺序必须和定义函数时的形式参数顺序一致,否则会产生以下两种结果:

  • 抛出 TypeError 异常;
  • 产生的结果和预期不符。

举例如下所示:

例一,抛出异常

def result(num1, num2):  # 形参 num1、num2
    res = num1 + num2  # 加法运算
    print(res)


result(1, '阿杰')  # 调用函数时,传入的字符串不能和整数进行加法运算,会报错

运行结果:

Traceback (most recent call last):
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 13, in <module>
    result(1, '阿杰')
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 9, in result
    res = num1 + num2
TypeError: unsupported operand type(s) for +: 'int' and 'str'

例二,产生的结果和预期不符

def info(name, age, gender):  # name、age、gender 三个形式参数
    print('姓名:', name, ';年龄:', age, ';性别:', gender)


info(18, '阿杰', 23)  # 传入的实参与形参的顺序不一致,不会报错,但结果与预期不符

运行结果:

姓名: 18 ;年龄: 阿杰 ;性别: 23

2 Python 关键字参数

Python 关键字参数是指在调用函数时使用形式参数(形参)的名字来确定输入的实际参数。

Python 关键字参数可以避免牢记参数位置的麻烦,令函数的调用和参数传递更加灵活方便。

注意:关键字参数必须放在所有位置参数之后,否则会报错。

举例如下所示:

例一,

def info(name, age, gender):  # name、age、gender 三个形式参数
    print('姓名:', name, ';年龄:', age, ';性别:', gender)


info('阿杰', gender='男', age=18)  # 使用关键字参数传参:gender='男', age=18

运行结果:

姓名: 阿杰 ;年龄: 18 ;性别: 男

例二,

def info(name, age, gender):  # name、age、gender 三个形式参数
    print('姓名:', name, ';年龄:', age, ';性别:', gender)


info(name='阿杰', 18, gender='男')  # 关键字参数必须放在所有位置参数之后,否则会报错。

运行结果:

  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 5
    info(name='阿杰', 18, gender='男')
                        ^
SyntaxError: positional argument follows keyword argument

3 Python 默认参数

Python 默认参数指的是在定义函数时,直接给形式参数指定一个默认值。

如此,在调用函数时没有给拥有默认值的形参传递参数,Python 解释器也不会抛出异常,因为该参数可以直接使用定义函数时设置的默认值。

注意:默认参数必须在所有无默认值参数之后,否则会报语法错。

举例如下所示:

例一,

def info(name='null', age=0, gender='男'):  # 为 name、age、gender 三个形式参数添加默认值
    print('姓名:', name, ';年龄:', age, ';性别:', gender)


print(info.__defaults__)  # 先查看函数的形式参数的默认值,输出结果是元组的形式
info('阿杰')  # 不给形参 age、gender 传入实参,将显示默认值
info('阿杰', 18, '女')  # 给拥有默认值的形参重新传入实参,将显示新传入的值

运行结果:

('null', 0, '男')
姓名: 阿杰 ;年龄: 0 ;性别: 男
姓名: 阿杰 ;年龄: 18 ;性别: 女

例二,

def info(name='null', age, gender='男'):  # name、gender 两个形式参数添加默认值。默认参数必须在所有无默认值参数之后,否则会报语法错。
    print('姓名:', name, ';年龄:', age, ';性别:', gender)

运行结果:

  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 1
    def info(name='null', age, gender='男'):  # name、age、gender 三个形式参数
             ^
SyntaxError: non-default argument follows default argument

【友情链接】

微信公众号:码农阿杰

博客园

【参考资料】

Python 官网

Python 3.8.2 documentation

猜你喜欢

转载自blog.csdn.net/manongajie/article/details/105934708