百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

第四章:Python函数

itomcoil 2025-08-05 18:55 2 浏览

4.1 函数的定义与调用

4.1.1 理论知识

函数是组织好的、可重复使用的代码块,用于执行特定的任务。它可以提高代码的复用性和可维护性。

在Python中,定义函数使用def关键字,其基本语法如下:

def function_name(parameters):
    """函数文档字符串,用于描述函数的功能、参数和返回值"""
    # 函数体
    statements
    return expression
  • function_name是函数的名称,遵循Python的命名规则。
  • parameters是函数的参数列表,可以为空,多个参数之间用逗号分隔。参数是函数在调用时接收的数据。
  • 函数文档字符串(docstring)是对函数功能、参数和返回值的描述,虽然不是必需的,但强烈建议添加,以便他人理解和使用该函数。
  • statements是函数体,包含实现函数功能的具体代码。
  • return语句用于返回函数的执行结果。return语句是可选的,如果没有return语句,函数将返回None。

调用函数时,使用函数名后跟括号,如果函数有参数,在括号内传入相应的参数值。

4.1.2 示例代码

def add_numbers(a, b):
    """
    这个函数用于将两个数字相加并返回结果。

    参数:
    a (int或float): 要相加的第一个数字。
    b (int或float): 要相加的第二个数字。

    返回:
    int或float: a和b相加的结果。
    """
    result = a + b
    return result


sum_result = add_numbers(3, 5)
print(f"两数之和为: {sum_result}")

4.1.3 代码解释

  • 首先使用def定义了一个名为add_numbers的函数,它接受两个参数a和b。
  • 在函数体中,将a和b相加的结果赋值给result,然后使用return返回result。
  • 调用add_numbers(3, 5),将3和5作为参数传递给函数,函数执行后返回8,并将返回值赋给sum_result。
  • 最后通过print函数输出两数之和。

4.2 函数参数

4.2.1 位置参数

理论知识:位置参数是根据参数的位置来传递值的参数。在调用函数时,传递的参数值按照顺序依次对应函数定义中的参数。

示例代码

def describe_person(name, age):
    print(f"{name} 今年 {age} 岁。")


describe_person("Alice", 25)

代码解释

  • describe_person函数接受两个位置参数name和age。
  • 调用describe_person("Alice", 25)时,"Alice"按照位置对应name参数,25对应age参数,所以输出Alice 今年 25 岁。。

4.2.2 关键字参数

理论知识:关键字参数是在调用函数时,通过参数名来指定参数值的方式。这样可以不按照参数定义的顺序传递参数。

示例代码

def describe_person(name, age):
    print(f"{name} 今年 {age} 岁。")


describe_person(age=30, name="Bob")

代码解释

  • 同样是describe_person函数,这里调用时使用关键字参数,明确指定age的值为30,name的值为"Bob",所以输出Bob 今年 30 岁。,即使参数顺序与函数定义不同也能正确传递。

4.2.3 默认参数

理论知识:默认参数是在函数定义时为参数提供一个默认值。在调用函数时,如果没有传递该参数的值,则使用默认值。

示例代码

def describe_person(name, age=18):
    print(f"{name} 今年 {age} 岁。")


describe_person("Charlie")
describe_person("David", 22)

代码解释

  • describe_person函数中age参数有默认值18。
  • 调用describe_person("Charlie")时,没有传递age参数的值,所以使用默认值18,输出Charlie 今年 18 岁。。
  • 调用describe_person("David", 22)时,传递了age的值为22,则使用传递的值,输出David 今年 22 岁。。

4.2.4 可变参数

理论知识

  • *args:用于收集多个位置参数,将它们作为一个元组传递给函数。
  • **kwargs:用于收集多个关键字参数,将它们作为一个字典传递给函数。

示例代码

def print_info(*args, **kwargs):
    print("位置参数:", args)
    print("关键字参数:", kwargs)


print_info(1, 2, 3, name="Eve", city="New York")

代码解释

  • print_info函数使用*args和**kwargs来收集参数。
  • 调用print_info(1, 2, 3, name="Eve", city="New York")时,1、2、3被收集到args元组中,name="Eve"和city="New York"被收集到kwargs字典中。
  • 函数分别输出位置参数元组和关键字参数字典。

4.3 函数返回值

4.3.1 单返回值

理论知识:函数可以通过return语句返回一个值,这个值可以是任何数据类型。

示例代码

def square_number(num):
    return num ** 2


result = square_number(5)
print(f"5 的平方是: {result}")

代码解释

  • square_number函数接受一个参数num,计算其平方并通过return返回结果。
  • 调用square_number(5),返回值25赋给result,然后输出5 的平方是: 25。

4.3.2 多返回值

理论知识:函数也可以返回多个值,实际上是返回一个包含多个值的元组。

示例代码

def divide_numbers(a, b):
    quotient = a // b
    remainder = a % b
    return quotient, remainder


div_result, mod_result = divide_numbers(10, 3)
print(f"10 除以 3 的商是: {div_result},余数是: {mod_result}")

代码解释

  • divide_numbers函数接受两个参数a和b,计算商和余数,并通过return返回这两个值。
  • 调用divide_numbers(10, 3),返回的商和余数分别赋给div_result和mod_result,然后输出商和余数。

4.4 函数的嵌套

4.4.1 理论知识

函数的嵌套是指在一个函数内部定义另一个函数。内部函数只能在外部函数内部被调用,这种方式可以实现更复杂的逻辑封装和代码组织。

4.4.2 示例代码

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function


closure = outer_function(5)
result = closure(3)
print(f"结果是: {result}")

4.4.3 代码解释

  • outer_function函数接受一个参数x,并在其内部定义了inner_function函数。inner_function函数接受参数y,并返回x + y。
  • outer_function函数返回inner_function,此时inner_function形成了一个闭包,它记住了外部函数outer_function的x值。
  • 调用outer_function(5),返回的inner_function对象赋给closure。
  • 调用closure(3),实际上是调用inner_function(3),由于闭包特性,它可以使用outer_function中x的值5,所以返回5 + 3 = 8,并输出结果。

4.5 递归函数

4.5.1 理论知识

递归函数是指在函数的定义中使用自身来解决问题的函数。递归函数必须有一个终止条件,否则会导致无限递归,最终耗尽系统资源。

4.5.2 示例代码

def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n - 1)


fact_result = factorial(5)
print(f"5 的阶乘是: {fact_result}")

4.5.3 代码解释

  • factorial函数用于计算阶乘。
  • 当n为0或1时,这是终止条件,直接返回1。
  • 否则,通过n * factorial(n - 1)进行递归调用,例如计算5!时,会依次计算5 * 4 * 3 * 2 * 1。最终返回5的阶乘结果120并输出。

相关推荐

python学习教程-第七节内容

函数(重点)基本概念Python函数的语法是编程中的核心概念之一,它允许你将代码块封装为可重复调用的单元。基本语法定义函数:示例参数类型位置参数(PositionalArguments)按参数定义...

Python排序90%人只会用sorted()?这7个高阶技巧让你代码效率翻倍

高效处理数据的关键,往往从掌握排序开始。排序操作在Python编程中的重要性常被低估——直到你面对一个杂乱无章的数据集。作为数据处理的核心操作之一,排序效率直接决定了程序性能和代码可读性。无论你正在清...

第四章:Python函数

4.1函数的定义与调用4.1.1理论知识函数是组织好的、可重复使用的代码块,用于执行特定的任务。它可以提高代码的复用性和可维护性。在Python中,定义函数使用def关键字,其基本语法如下:def...

ArcGIS 一个独立运行的Python程序编写和打包

写代码#coding=utf8#-*-coding:UTF-8-*-importarcpyfromarcpyimportenvimportosimportsys##########...

python入门到脱坑经典案例—计算三角形的面积

下面为大家详细讲解如何用Python计算三角形面积。我们会从最基础的数学公式开始,逐步深入编程实现,并涵盖多个实用版本。以下是完整的教学指南:1.数学原理回顾三角形面积公式:面积=(底边长度...

Python运算技巧:10种计算列表平方的高效方法

1.使用for循环此方法遍历列表中的每个数字,使用**运算符计算其平方,然后将结果添加到新的列表中。2.使用列表推导式此方法使用列表推导式,这是一种更简洁的方式,可以在现有列表的每个项目上执行操作...

墙裂推荐,5个学习Python编程最佳的开源库

学习Python少不了的就是项目,我在GitHUB上找了几个比较好的开源库,大家可以跟着去学习。1、learn-python3这个存储库一共有19本Jupyter笔记本。它涵盖了字符串和条件之类的基础...

使用Python玩转ftplib库:实现ftp文件传输自动化全攻略

大家好!在日常工作中都会使用到ftp功能,用于上传和下载文件等,本章主要介绍Python的标准库ftplib来实现FTP文件传输,帮助我们实现ftp自动化。一、ftplib库核心函数速查表1连接与登...

Python零基础入门学习23:常用第三方库之图像处理库Pillow

注:本文所有代码均经过Python3.7实际运行检验,保证其严谨性。本文约2000字,阅读时间约为4分钟。Pillow库的概述Pillow库是Python最好的图像处理库,可能是使用频率最高的图像处...

Python编程之BeautifulSoup库

#头条创作挑战赛#BeautifulSoup是一个可以从HTML或XML文件中快速提取数据的Python库。它能够通过转从入门到精通Python网络爬虫框架Scrapy38换器实...

Python3 新一代Http请求库Httpx使用(详情版)

我们经常使用Python语言的朋友们都清楚,requests是使用率非常高的HTTP库,甚至更早Python2中使用的是urllib、urllib2,也给我们提供了许多方便的功能。但是自从...

小白也可以玩的Python爬虫库,收藏一下

最近,微软开源了一个项目叫「playwright-python」,作为一个兴起项目,出现后受到了大家热烈的欢迎,那它到底是什么样的存在呢?今天为你介绍一下这个传说中的小白神器。Playwright是...

apscheduler,一个超厉害的 Python 库!

大家好,今天为大家分享一个超厉害的Python库-apscheduler。Github地址:https://github.com/agronholm/apschedulerAPSchedule...

给3D Slicer添加Python第三方插件库

对临床医生或医学影像算法研究人员来说,3DSlicer是不错的临床实践或科研工具。随着人工智能和深度学习技术的普及,python已经作为原型开发和验证的计算机编程语言。3DSlicer自带pyt...

Paramiko:一个非常实用的Python库

前言Python的Paramiko库,它是一个用于实现SSHv2协议的客户端和服务器的库。通过使用Paramiko,我们可以在Python程序中轻松地实现远程服务器的管理、文件传输等功能。特别做智能硬...