Python函数详解

news2024/12/29 11:48:01

目录

一、函数的定义

二、函数的特性

三、函数参数

四、返回值

五、文档字符串

六、高级函数

七、偏函数

八、装饰器

总结



在Python编程中,函数是构建程序的基本模块,它提供了一种封装特定任务的方式,使得代码更加模块化、可重用和易维护。本文将详细介绍Python函数的定义、参数、返回值、高级函数、偏函数和装饰器,并通过代码和案例帮助新手朋友更好地理解和应用这些概念。

一、函数的定义

在Python中,函数是通过def关键字来定义的。函数定义的基本结构如下:

def function_name(parameters):
    """函数的文档字符串,可选"""
    # 函数体
    return value  # 可选
  • function_name:函数的名称,遵循Python的标识符命名规则。
  • parameters:函数的输入参数,可以有多个,也可以没有。
  • 函数体:实现具体功能的代码块。
  • return语句:用于返回结果,若没有,则默认返回None。

例如,定义一个简单的函数来计算两个数的乘积:

def multiply(a, b):
    """返回两个数的乘积"""
    return a * b

二、函数的特性

  • 封装性:函数将特定功能的代码封装在一起,便于复用。
  • 可读性:通过函数名称和文档字符串,提升代码的可读性。
  • 模块化:可以将复杂的任务分解为多个简单的函数,便于管理和调试。

三、函数参数

函数参数分为形参(形式参数)和实参(实际参数)。形参是在函数定义时括号内的参数,而实参是在函数调用时传入的参数。

位置参数:按位置传递参数,调用时需要按顺序传入。

def greet(name):
    print(f"Hello, {name}!")
 
greet("Alice")  # 输出: Hello, Alice!

关键字参数:通过参数名称传递,调用时可以交换顺序。

def greet(name, age):
    print(f"{name} is {age} years old.")
 
greet(age=30, name="Bob")  # 输出: Bob is 30 years old.

默认参数:为参数指定默认值,调用时可以不传入该参数。

def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")
 
greet("Alice")  # 输出: Hello, Alice!

注意:默认参数必须放在未指定默认值的参数后面。

可变参数:使用*args和**kwargs处理不定数量的参数。

def summarize(*args):
    return sum(args)
 
def show_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")
 
summarize(1, 2, 3)  # 输出: 6
show_info(name="Alice", age=30)  # 输出: name: Alice, age: 30

四、返回值

函数通过return语句返回计算结果。如果没有return语句,函数默认返回None。

def demo1():
    pass
 
a = demo1()
print(a)  # None

return可以返回一个值,也可以返回多个值(多个值返回一个元组)。

def demo1():
    return 1, 2, 3, 4
 
a = demo1()
print(a)  # (1, 2, 3, 4)

返回值是函数与调用者之间通信的一种方式,它允许函数将计算结果或状态信息返回给调用者,以便在后续的代码中使用。

五、文档字符串

函数的文档字符串(docstring)是函数的帮助文档,包含函数的基础信息、功能简介、参数类型和使用方法等。文档字符串必须在函数首行定义,使用三个引号注解。

def multiply(x, y):
    """
    Multiply two numbers.
    
    Args:
        x (int or float): The first number.
        y (int or float): The second number.
        
    Returns:
        int or float: The product of x and y.
    """
    return x * y

六、高级函数

高级函数是指能够接受函数作为参数或返回函数作为结果的函数。Python中的高阶函数包括filter()、map()、reduce()、sorted()等。

filter():用于过滤序列,返回一个迭代器,其中的元素是通过函数返回值为True的元素。

def is_even(x):
    return x % 2 == 0
 
list1 = [1, 2, 3, 4, 5, 6]
f1 = list(filter(is_even, list1))
print(f1)  # [2, 4, 6]
map():对序列中的每个元素进行操作,返回修改后的元素组成的新迭代器。
python
def square(x):
    return x * x
 
list1 = [1, 2, 3, 4]
m1 = list(map(square, list1))
print(m1)  # [1, 4, 9, 16]
reduce():对一个序列进行累积操作,返回一个单一的值。需要导入functools模块。
python
from functools import reduce
 
list1 = [1, 2, 3, 4, 5]
r1 = reduce(lambda x, y: x + y, list1)
print(r1)  # 15
sorted():对可迭代对象进行排序,根据key来指定排序规则。
python
list1 = [5, 3, 4, 2, 1]
sorted_list = sorted(list1)
print(sorted_list)  # [1, 2, 3, 4, 5]

七、偏函数

偏函数(partial function)是指通过固定一个或多个参数的值,从而得到一个新的函数对象的技术。新的函数对象与原始函数有着相同的功能,但在调用时,一些参数已经被预先设定好了。

偏函数是通过functools模块中的partial函数创建的。

from functools import partial
 
def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")
 
greet_alice = partial(greet, name="Alice")
greet_alice()  # 输出: Hello, Alice!

使用偏函数的主要原因是为了简化代码,提高代码的可读性和复用性。

八、装饰器

装饰器是一种语法糖,用于在不改变原有函数代码的情况下,为函数添加额外的功能。装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数,通常使用@语法糖来应用装饰器。

装饰器不能修改被装饰的函数代码或调用方式。

def cache(func):
    cached_results = {}
    
    def wrapper(*args):
        if args in cached_results:
            return cached_results[args]
        result = func(*args)
        cached_results[args] = result
        return result
    
    return wrapper
 
@cache
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)
 
print(fibonacci(10))  # 第一次调用计算,后续调用从缓存中获取结果

在这个示例中,cache是一个装饰器函数,它接收一个函数作为参数,并返回一个新的函数wrapper。wrapper函数维护了一个cached_results字典,用于存储函数的缓存结果。在调用被装饰的函数之前,wrapper函数先检查输入参数是否已经存在于cached_results中,如果存在,则直接返回缓存结果,否则调用原函数计算结果,并将结果存储到cached_results中。

总结

本文详细介绍了Python函数的定义、参数、返回值、高级函数、偏函数和装饰器。通过丰富的代码和案例,希望能帮助新手朋友更好地理解和应用这些概念。函数是Python编程中的基础,掌握这些知识点对于提高代码的可读性、可维护性和可重用性具有重要意义。希望本文对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2238726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【贪心算法】贪心算法三

贪心算法三 1.买卖股票的最佳时机2.买卖股票的最佳时机 II3.K 次取反后最大化的数组和4.按身高排序5.优势洗牌&#xff08;田忌赛马&#xff09; 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#…

【Android、IOS、Flutter、鸿蒙、ReactNative 】文本点击事件

Android Studio 版本 Android Java TextView 实现 点击事件 参考 import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Toast;public c…

超30万亿消费规模下,低龄VS高龄、他VS她、共性VS个性的市场机会

作者 | NewAgingPro团队 前言 NewAgingPro团队基于多年研究沉淀&#xff0c;发现每个行业都具备为老年人群再次细分的机会&#xff0c;中国的银发经济市场将围绕老年人需求不断往细分场景垂直深耕。具体哪些需求是市场增长的源动力&#xff1f;40岁泛银发群体的需求趋势如何…

贪心算法-汽车加油

这道题目描述了一个汽车旅行场景&#xff0c;需要设计一个有效的算法来决定在哪几个加油站停车加油&#xff0c;以便最小化加油次数。题目给出了汽车加满油后的行驶距离n公里&#xff0c;以及沿途若干个加油站的位置。我们需要找出一个方案&#xff0c;使得汽车能够完成整个旅程…

【动手学电机驱动】STM32-FOC(6)基于 IHM03 的无感方波控制

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

CNN实现地铁短时客流预测

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

SDL打开YUV视频

文章目录 问题1&#xff1a;如何控制帧率&#xff1f;问题2&#xff1a;如何触发退出事件&#xff1f;问题3&#xff1a;如何实时调整视频窗口的大小问题4&#xff1a;YUV如何一次读取一帧的数据&#xff1f; 问题1&#xff1a;如何控制帧率&#xff1f; 单独用一个子线程给主线…

Linux 系统结构

Linux系统一般有4个主要部分&#xff1a;内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构&#xff0c;它们使得用户可以运行程序、管理文件并使用系统。 1. linux内核 内核是操作系统的核心&#xff0c;具有很多最基本功能&#xff0c;它…

使用vscode 连接linux进行开发

1. 在Vscode中安装扩展功能remote ssh 2. 打开命令窗口 3. 在弹出的命令窗口输入ssh&#xff0c;并从弹出的提示中选择 Add New SSH Host 4. 在弹出的输入窗口中输入类似下面形式的 连接地址&#xff1a; 5. 输入回车后出现下面的对话框&#xff0c;这个对话框是说你要用哪个…

【C++】 C++游戏设计---五子棋小游戏

1. 游戏介绍 一个简单的 C 五子棋小游戏 1.1 游戏规则&#xff1a; 双人轮流输入下入点坐标横竖撇捺先成五子连线者胜同一坐标点不允许重复输入 1.2 初始化与游戏界面 初始化界面 X 输入坐标后 O 输入坐标后 X 先达到胜出条件 2. 源代码 #include <iostream> #i…

计算机新手练级攻略——如何搜索问题

目录 计算机学生新手练级攻略——如何搜索问题1.明确搜索意图2.使用精确关键词3.使用专业引擎搜索4.利用好技术社区1. Stack Overflow2. GitHub3. IEEE Xplore4. DBLP 5.使用代码搜索工具1. GitHub 代码搜索2. Stack Overflow 代码搜索3. Papers with Code4. IEEE Xplore 6.查阅…

【MySQL】MySQL基础知识复习(下)

前言 上一篇博客介绍了MySQL的库操作&#xff0c;表操作以及CRUD。 【MySQL】MySQL基础知识复习&#xff08;上&#xff09;-CSDN博客 本篇将进一步介绍CRUD操作&#xff0c;尤其是查找操作 目录 一.数据库约束 1.约束类型 1.1NULL约束 1.2UNIQUE&#xff1a;唯一约束 …

从0开始学docker (每日更新 24-11-6)

限制容器运行的资源 限制容器的内存使用 容器的内存包括两部分&#xff1a;物理内存和交换空间&#xff08;swap&#xff09; 用户内存限制 -m,--memory&#xff1a;容器可用的最大内存&#xff0c;该值最低为4MB --memory-swap&#xff1a;允许容器置入磁盘交换空间的内存…

C++初阶——vector

一、什么是vector vector是表示可变大小的数组的序列容器&#xff0c;就像数组一样&#xff0c;vector也采用连续空间来存储元素。也就是说它的访问和数组一样高效&#xff0c;但是它的大小是动态可变的&#xff0c;并且它的大小会被容器自动处理。 二、vector的构造 常用的构…

GIT的基本使用与进阶

GIT的简单入门 一.什么是git&#xff1f; Git 是一个开源的分布式版本控制系统&#xff0c;用于跟踪文件更改、管理代码版本以及协作开发。它主要由 Linus Torvalds 于 2005 年创建&#xff0c;最初是为 Linux 内核开发而设计的。如今&#xff0c;Git 已经成为现代软件开发中…

CulturalBench :一个旨在评估大型语言模型在全球不同文化背景下知识掌握情况的基准测试数据集

2024-10-04&#xff0c;为了提升大型语言模型在不同文化背景下的实用性&#xff0c;华盛顿大学、艾伦人工智能研究所等机构联合创建了CulturalBench。这个数据集包含1,227个由人类编写和验证的问题&#xff0c;覆盖了包括被边缘化地区在内的45个全球区域。CulturalBench的推出&…

C语言中,“extern”关键字的含义与用法

在C语言中&#xff0c;extern 关键字用于声明一个已经在其他地方定义的变量或函数。它的主要作用是告诉编译器&#xff0c;某个变量或函数是在当前文件之外定义的&#xff0c;编译器应该在链接阶段找到这个变量或函数的实际定义。以下是 extern 的一些常见用途和用法&#xff1…

「Mac玩转仓颉内测版1」入门篇1 - Cangjie环境的搭建

本篇详细介绍在Mac系统上快速搭建Cangjie开发环境的步骤&#xff0c;涵盖VSCode的下载与安装、Cangjie插件的离线安装、工具链的配置及验证。通过这些步骤&#xff0c;确保开发环境配置完成&#xff0c;为Cangjie项目开发提供稳定的基础支持。 关键词 Cangjie开发环境搭建VSC…

Kubernetes网络揭秘:从DNS到核心概念,一站式综述

文章目录 一.overlay vs underlayL2 underlayL3 underlay 二、calico vs flannel2.1 calico架构2.2 flannel架构 三、iptables四、Vxlan五、kubernetes网络架构综述六、DNS七、Kubernetes域名解析策略 一.overlay vs underlay overlay网络是在传统网络上虚拟出一个虚拟网络&am…

飞凌嵌入式FET527N-C核心板现已适配Android 13

飞凌嵌入式FET527N-C核心板现已成功适配Android13&#xff0c;新系统的支持能够为用户提供更优质的使用体验。那么&#xff0c;运行Android13系统的FET527N-C核心板具有哪些突出的优势呢&#xff1f; 1、性能与兼容性提升 飞凌嵌入式FET527N-C核心板搭载了全志T527系列高性能处…