python函数定义与使用

  • Post category:Python

当我们编写 Python 程序时,经常需要用到函数来封装一些可重用的代码块。Python 函数定义非常简单,可以使用 def 关键字来定义一个函数。

Python 函数的定义

Python 函数的定义格式如下:

def function_name(parameters):
    """函数文档字符串"""
    function body
    return [expression]

其中,

  • def 是 Python 中定义函数的关键字;
  • function_name 表示函数名称;
  • parameters 为函数的参数列表,多个参数用逗号分隔;
  • 函数文档字符串用于描述函数的功能和参数,通过 __doc__ 可以查看函数的文档字符串;
  • function body 是函数的代码块,它以一个冒号起始,并通过缩进来表示代码块,函数体中的语句块必须要有相同的缩进级别;
  • return 语句可选,用于返回函数的结果,如果不写,则返回 None

下面是一个简单的 Python 函数示例,用来计算两个数字的和:

def sum(a, b):
    """计算两个数的和"""
    return a + b

在上述代码中,sum 表示函数名称,ab 表示函数的参数列表,函数体中代码 a + b 用于计算两个数字的和,"""计算两个数的和""" 用于描述函数的功能和参数。

Python 函数的调用

在定义完 Python 函数后,我们可以通过它来进行操作。Python 函数的调用非常简单,只需要写出函数名和对应的参数即可。

result = sum(1, 2)
print(result)

在上述代码中,我们定义了一个名为 result 的变量来存储函数 sum 的返回结果,并通过 print 打印出来。

Python 函数的参数传递

在 Python 中,函数参数可以分为位置参数和关键字参数。位置参数是最常见的参数类型,它们在调用函数时按照函数定义的顺序传递给函数。关键字参数则是指在函数调用时,通过指定参数名来传递参数值。

位置参数

位置参数在函数调用时,必须按照函数定义的参数列表以相同的顺序传递。例如下面的代码:

def print_score(name, score):
    """打印学生成绩"""
    print(f"{name}的成绩是{score}")

print_score("小明", 85)

在上述代码中,函数 print_score 的参数列表为 namescore,在函数调用时,我们按照 namescore 参数的顺序传递了 “小明” 和 85 两个位置参数。

关键字参数

关键字参数则是指在函数调用时,通过指定参数名来传递参数值。例如下面的代码:

def print_score(name, score):
    """打印学生成绩"""
    print(f"{name}的成绩是{score}")

print_score(name="小明", score=85)

在上述代码中,我们在函数调用时,通过指定参数名 namescore 来传递参数值。关键字参数的顺序可以任意。

默认参数

默认参数用于为函数的参数提供默认值,如果在函数调用时没有传递该参数,则使用默认值。例如下面的代码:

def print_score(name, score=60):
    """打印学生成绩"""
    print(f"{name}的成绩是{score}")

print_score("小明")

在上述代码中,我们定义了一个名为 score 的默认参数,它的默认值是 60。在调用函数 print_score 时,我们只传递了一个 name 参数,并没有传递 score 参数,此时函数 print_score 会使用默认值 60。

可变参数

在 Python 中,我们可以通过定义可变参数来接受任意数量的位置参数或关键字参数。

*args

通过使用 *args 可以接受任意数量的位置参数。例如下面的代码:

def sum(*args):
    """计算任意数量的数的和"""
    total = 0
    for arg in args:
        total += arg
    return total

print(sum(1, 2, 3))

在上述代码中,我们定义了一个名为 *args 的参数,它表示接受任意数量的位置参数。在调用函数 sum 时,我们传递了 3 个位置参数,此时函数 sum 会将这 3 个参数相加并返回结果。

**kwargs

通过使用 **kwargs 可以接受任意数量的关键字参数。例如下面的代码:

def print_info(name, **kwargs):
    """打印任意数量的信息"""
    print(f"姓名:{name}")
    for key, value in kwargs.items():
        print(f"{key}:{value}")

print_info("小明", age=18, gender="男")

在上述代码中,我们定义了一个名为 **kwargs 的参数,它表示接受任意数量的关键字参数。在调用函数 print_info 时,我们传递了 agegender 两个关键字参数,此时函数 print_info 会打印出这两个参数的值。

示例1:使用函数求矩形面积

下面我们来举一个例子,在该例子中,我们将定义一个名为 calc_area 的函数,用来计算矩形的面积。该函数将接受矩形的宽度和高度两个参数,并通过公式 width * height 来计算矩形的面积。

def calc_area(width, height):
    """计算矩形的面积"""
    return width * height

width = 3
height = 4
area = calc_area(width, height)
print(f"宽度为{width},高度为{height}的矩形面积是{area}。")

在上述代码中,我们定义了一个名为 calc_area 的函数,它接受矩形的宽度和高度两个参数,并返回矩形的面积。在调用函数 calc_area 时,我们传递了宽度为 3,高度为 4 两个参数,函数将使用公式 width * height 计算矩形的面积,并返回计算结果。最后我们将矩形的宽度、高度和面积一起打印出来。

示例2:将列表中的偶数移至一个新列表中

下面我们来示例一个更复杂的函数,它可以将列表中的偶数移至一个新列表中。该函数将接受一个列表作为参数,并将其中的偶数移至新列表中返回。

def filter_even_numbers(numbers):
    """过滤列表 numbers 中的偶数并返回"""
    even_numbers = []
    for number in numbers:
        if number % 2 == 0:
            even_numbers.append(number)
    return even_numbers

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter_even_numbers(numbers)
print(f"原列表为{numbers},偶数列表为{even_numbers}")

在上述代码中,我们定义了一个名为 filter_even_numbers 的函数,它接受一个列表作为参数,并将其中的偶数移至新列表中返回。在调用函数 filter_even_numbers 时,我们传递了一个列表的参数,函数将遍历该列表,并针对其中的每个元素进行处理。如果该元素是偶数,则将其添加至新列表 even_numbers 中。最后我们将原来的列表和新列表一起打印出来。