欢迎访问宙启技术站
智能推送

Python函数参数:如何设置函数的参数和默认值?

发布时间:2023-05-22 23:02:47

Python中函数是重要的程序结构,它是由一些指令组成的,可重复使用的代码库。函数允许我们定义可执行的代码块,并通过函数名调用它们,在进行更大的编程任务时实现程序结构的模块化和复用。

函数允许使用参数。参数使函数更灵活,可以将参数传递给函数,以便它使用它们来执行操作。Python中可以定义可选的默认参数。

本文将介绍如何定义和使用函数参数及其默认值。

## 参数是什么?

函数的参数是一种变量,在函数调用时传递值,这些值用于函数内部执行任务的过程。函数有许多用途,其中之一是在大型项目中简化代码重用。在这种情况下,我们将函数中的代码块视为应用程序中的单个任务。

Python函数可以有零个或多个参数。在函数定义中,参数是在函数名称后面的括号中列出的,用逗号分隔。例如,在下面的函数中,我们定义x和y作为参数。

def add(x, y):
    return x + y

函数内部代码使用了参数x和y,然后根据它们的每个值执行操作,并将结果作为函数的返回值。

默认情况下,Python函数不需要参数。在这种情况下,函数定义只有函数名称和冒号,如下面的示例所示:

def say_hello():
    print("你好!")

## 如何使用参数?

当调用函数时,可以传递值给函数的参数。传递的每个值都将分配给函数定义中参数名称相应位置的变量。

在下面的示例中,我们调用了add函数并分配了两个参数x和y。值3和5分别分配给x和y:

def add(x, y):
    return x + y

result = add(3, 5)
print(result)  # 输出 8

## 参数的默认值

默认参数是在函数定义中为参数分配的预定义值。如果函数调用未提供默认参数的值,则使用默认值。

在以下示例中,color参数具有默认值“名字”,因此函数调用未提供“颜色”参数的值,“名字”为color的默认值:

def say_hello(name, color='名字'):
    print(f' 你好,{name}!你喜欢{color}。')

say_hello('Joe', '蓝色')
say_hello('Mike')

由于提供了值'蓝色',因此输出如下:

你好,Joe!你喜欢蓝色。
你好,Mike!你喜欢名字。

请注意,在第二次函数调用中,我们未指定颜色值。由于使用了默认值“名字”,输出为“你喜欢的名字”。

如果您的代码需要使用或重复调用一个或多个特定值,并且在此过程中不需要修改或更改这些值,请考虑使用默认参数。此外,如果大多数函数调用都不使用特定参数,但某些较少的调用需要某些参数,则 使用默认参数。

## 按关键字传递参数

按关键字传递参数时,某些参数在传递到函数时被指定。此模式的优势是:参数按名称传递,即使参数列表很长,也很容易理解函数调用。

在下面的示例中,我们称为print_content函数。其中, 个参数是文件名称,第二个参数是页数:

def print_content(file_name, page_number):
    print(f'打印{file_name}的第{page_number}页。')

print_content(file_name='product_stats.csv', page_number=15)

输出:

打印product_stats.csv的第15页。

调用函数时,我们按名称提供参数。这样做可能使代码更易于阅读和维护,因为函数调用清楚地标识每个参数的名称和值。

如果不依赖按名称传递参数,可以创建按顺序传递参数的函数。

## 按顺序传递参数

要使用按顺序传递参数,我们可以提供函数定义中列出的参数列表。此方法使我们可以省略参数名称,而是按照函数名称中列出的顺序来提供参数值。

例如,以下函数增加了x和y输入的值:

def add(x, y):
    return x + y

可以使用以下方式调用函数:

result = add(2, 3)
print(result)

这将输出“5”作为结果。

注意,在函数定义中x列于y的前面,因此我们按顺序传递值2和3。

## 解包参数列表

有时候传递参数时不想以常规方式传递参数,而是希望传递列表或元组,此时需要用到解包参数列表或元组。

以下是一个示例函数,该函数需要x和y输入的值,请使用解压缩列表作为参数:

def add(x, y):
    return x + y

我们可将列表(1,2)和Python中的星号运算符*传递给add函数:

vals = [1, 2]
result = add(*vals)

print(result)  # 输出 3

请注意,我们使用星号运算符(*)来扩展列表中的值,并使其成为带有两个元素的位置参数。这样做可以让我们调用函数,并同时将列表的两个值分配给相对应的参数。

## 参数类型

Python提供了灵活的方式来定义并使用不同类型的函数参数。

### 必要参数

必要参数是函数定义中的参数,这些参数没有默认值,并且必须在函数调用中提供值。如果没有为必要参数提供值,则调用函数将失败,并引发TypeError异常。

### 默认参数

默认参数是在函数定义中为参数指定的值。如果在函数调用中未为默认参数指定值,则使用默认值。这使得函数更灵活,并允许较少的信息用于函数调用。

### 关键字参数

可以通过关键字来指定参数,即在函数调用中明确指定参数名称。这样可以使函数调用更明确,并使代码更容易阅读。

请注意,在函数调用中并不需要按照函数定义中参数的顺序来指定参数。

### 可变参数

Python支持定义可变数量参数的函数。可变参数是指在函数定义中可以接受不同数字的位置参数。这可以用来编写可处理不同数量的参数的函数。

在以下示例中,def语句使用*操作符定义了一个可变参数。该参数名args可以是任何名称,但通常使用args。该函数计算args中所有数字的总和并返回该总和。

def sum_args(*args):
    return sum(args)

print(sum_args(1, 2, 3))  # 输出 6

### 关键字可变参数

也可以使用关键字参数传递可变数量的参数。关键字可变参数是通过两个星号*表示的,该星号使参数成为一个键值对列表。

在以下示例中,我们编写一个可以接受不同数目的关键字参数的函数。该函数打印接收到的所有参数,以及它们的值:

def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(height=180, weight=70, age=30)

输出:

{'height': 180, 'weight': 70, 'age': 30}

我们可以在函数调用中提供任意数量的关键字参数,如上述代码中所示。在函数内部,我们可以访问kwargs变量,并