Python 教程 25 Python 中参数类型的详细说明

小夏 科技 更新 2024-02-18

当我们编写函数时,我们定义了一些占位符,这些占位符是参数,是函数定义中用来接收外部传递值的占位符,这将有助于我们在调用函数时接收外部传递的值。 在Python中,有各种类型的参数,包括位置参数、默认参数、关键字参数、变量位置参数、变量关键字参数和强制关键字参数。

位置参数是最常见的参数类型,也是默认参数类型。 它们按照它们在函数定义中的显示顺序传递,并且在调用函数时必须按顺序提供。

def greet(name, message):

print(message, name)

greet("alittle", "hello"输出:hello alittle

默认参数是那些在定义函数时具有默认值的参数,并且在调用函数时,如果没有为参数提供特定值,则默认值将用作参数的值。 通过设置参数的默认值,可以使函数在某些情况下更加灵活和易于使用。 如果调用函数时未提供该参数的值,则该函数将使用默认值,否则将使用传递给该参数的值。

def greet(name, message="hello"):

print(message, name)

使用默认参数调用函数。

greet("alittle"输出:hello alittle

传递特定参数值将调用该函数。

greet("kobe", "hi"输出: Hi Kobe

需要注意的是,在Python中,默认参数是从左到右依次设置的,如果要为第一个参数设置默认值,则必须确保它位于以下参数之前。 也就是说,要设置倒数第二个参数的默认值,必须首先为倒数第二个参数设置默认值。

def greet(name="iverson", message):

print(message, name)

由于第一个参数具有默认值,因此只能传递第二个参数。

greet("kobe")

运行上述示例时,报错信息:

file "d:\program files\jetbrains\pycharmprojects\hello.py", line 33

def greet(name="iverson", message):

syntaxerror: non-default argument follows default argument

尝试为第一个参数设置默认值时发生语法错误。 这是因为在定义函数时,默认参数只能放在非默认参数之后。 所以如果我们想为第一个参数设置一个默认值,我们可以考虑使用关键字参数来传递参数值,或者两个参数可以颠倒过来。

关键字参数是一种在调用函数时使用参数名称指定参数值的方法。 使用关键字参数可以使函数调用更清晰、更易读,尤其是当函数具有多个参数并且它们具有相同的数据类型或默认值时。

例如,上面的默认参数示例:

def greet(name, message):

print(message, name)

使用关键字参数调用函数。

greet(name="iverson", message="hello"输出:hello iverson

greet(message="hi", name="kobe"输出: Hi Kobe

在上面的示例中,我们在调用函数时通过参数名称指定了参数值。 这不仅可以准确传递参数,还可以使函数调用的意图更清晰、更易于理解。 即使将函数定义中的第一个参数设置为默认值,也不会进行纠错。

因此,您可以使用关键字参数显式指定参数名称,这样可以避免因参数顺序错误而导致的错误。 并且只将值传递给您关心的参数,而忽略其他参数。 在调用函数时提供更好的可读性和可维护性。

可变长度位置参数是一种属性,它允许函数接受任意数量的位置参数。 定义函数时,使用星号 (*) 作为前缀来表示变量位置参数。 它将所有传入的位置参数打包到一个元组中。 定义函数后,我们可以在参数列表中使用 *args 来接收这些参数。

def calculate_sum(*numbers):

total = 0

for num in numbers:

total += num

return total

print(计算总和(1, 2, 3)) 输出: 6

print(calculate sum(4, 5, 6, 7, 8)) 输出: 30

同样重要的是要注意,可变位置参数放在其他参数之后。 也就是说,函数定义中首先定义的参数将按位置顺序读取参数的值,而变量位置参数将读取所有剩余的参数。 例如,如果你想这样写,你会得到一个错误:

def calculate_sum(*numbers, message):

total = 0

for num in numbers:

total += num

return message, total

result = calculate_sum(1, 2, 3, "sum=")

print(result)

如果运行它,将报告以下错误。

traceback (most recent call last):

file "d:\program files\jetbrains\pycharmprojects\hello.py", line 40, in

result = calculate_sum( 1, 2, 3, "sum=")

typeerror: calculate_sum() missing 1 required keyword-only argument: 'message'

变量关键字参数是通过使用 ** 前缀来定义的,以接收任意数量的关键字参数。 有点类似于键值格式,它会将所有传入的关键字参数打包到一个字典(dict)中,可以使用键值对在函数内部访问该字典。

def calculate_sum(*args, *kwargs):

total = sum(args)

for key, value in kwargs.items():

total += value

return total

result = calculate_sum(1, 2, 3, num1=4, num2=5)

print(result) 输出: 15

在此示例中,calculate_sum函数接受可变位置参数args和可变关键字参数kwargs。可变位置参数args用于接收任意数量的位置参数,同时变量关键字参数可用kwargs用于接收任意数量的关键字参数。 在函数内部,我们首先使用calculate_sum功能对可变位置参数args做一个总结。 然后,我们遍历变量关键字参数kwargs将关键字参数的值相加到总和。

变量关键字参数提供了一种灵活的方法来处理不确定数量的关键字参数,并为函数提供更大的可伸缩性和适应性。

必需的仅关键字参数位于 3在版本 1 之后引入,意味着在定义函数时,使用 * 后缀来限制调用函数时关键字参数的使用,不允许使用位置参数。

def greet(*,name, message):使用分隔符“*”指示必须使用关键字传递以下参数。 

print(message, name)

greet(name="alittle", message="hi") 关键字参数传递。

greet("kobe", "hi")

第一次通话greet没问题,但第二名叫greet它将引发异常并报告错误。

traceback (most recent call last):

file "d:\program files\jetbrains\pycharmprojects\hello.py", line 39, in

message = greet("kobe", "hi")

typeerror: greet() takes 0 positional arguments but 2 were given

通过使用必填关键字参数,我们可以清楚地传达参数的含义,避免混淆参数的位置,并提高参数的可读性和鲁棒性。

相似文章

    Python 教程 22 Python 面向对象的属性和方法

    在 Python 面向对象编程中,属性和方法是类及其对象的重要组成部分。如果说封装 继承和多态是面向对象编程的思想,那么类的属性和方法就是骨架,因为属性和方法,面向对象编程就成了血肉之躯。属性是类或对象所拥有的数据,用于描述对象的特征和状态。特性可以是实例属性 特定于对象的属性 或类属性 属于类本身...

    Python 教程:Python 变量的 6 种基本类型

    学习一门编程语言,你必须忽略变量的概念。Python 中的变量是用于存储数据的数据的名称,您可以为变量赋值,并使用该变量在程序中的其他位置引用该值。变量在程序中扮演存储和操作数据的角色。如果你已经学习了 C C 语言,在定义变量后,你需要添加一种限制类型,例如 intage doublemoney ...

    python新手教程很简单

    Python 新手教程。Python 是一种简单易学 功能强大的编程语言,具有简洁的语法和丰富的库,使 Python 成为初学者的理想选择。以下是一些简单的示例,可帮助您开始 Python 编程。首先,我们需要安装 python。您可以从 Python 网站 安装最新版本的 Python。安装完成后...

    Python 教程:浮点运算揭秘

    嗨,大家好,欢迎来到我的python教程专栏!今天我们要讲的是Python中一个非常有趣的话题 浮点运算。在我们的日常编码中,我们可能会遇到一些令人烦恼的浮点运算,让我们一起揭开这个谜团的神秘面纱吧!问题的本质 十进制与二进制 首先,让我们了解浮点数在计算机中是如何表示的。在硬件级别,浮点数表示为基...

    Python 教程列表工具

    嗨,大家好!今天,我们将深入探讨 Python 中一些强大的列表工具,让您的编程之旅更加得心应手。Python教程编程技巧 .阵列模块 首先,我们来谈谈阵列模块。该模块为我们提供了一个更紧凑 更高效的列表,特别适合存储相似的数据。看看这个例子,我们可以存储双字节无符号二进制数字数组,而不是通常的 p...