深入理解 Python 中的函数 —— 全面指南

目录

  1. 什么是函数
  2. 函数的定义与调用
  3. 函数的参数传递
  4. 默认参数与关键字参数
  5. 可变长参数
  6. 匿名函数(Lambda函数)
  7. 函数的返回值
  8. 递归函数
  9. 高阶函数
  10. 装饰器函数
  11. 函数的作用域与闭包
  12. 总结

1. 什么是函数

函数是将一段特定功能的代码封装成一个独立的模块,便于代码的重复利用。函数可以接受输入参数,进行相应的处理,最终返回一个结果。

优点:

  • 代码复用性高
  • 逻辑清晰,结构化
  • 提高代码的可读性和维护性

2. 函数的定义与调用

函数的定义

在 Python 中,使用 def 关键字定义一个函数。函数的定义语法如下:

def function_name(parameters):"""函数的文档字符串 (可选)"""函数体return value  # (可选)

示例:

def greet(name):"""简单的问候函数"""return f"Hello, {name}!"# 调用函数
print(greet("Alice"))  # 输出:Hello, Alice!

在这个示例中,greet 函数接收一个参数 name,并返回一个问候字符串。

函数调用

函数调用通过其名称并传入相应的参数,语法如下:

function_name(arguments)

3. 函数的参数传递

函数参数用于传递数据到函数内部进行处理。Python 的函数支持多种形式的参数传递,包括位置参数、关键字参数、默认参数等。

位置参数

位置参数是按照函数定义时的顺序传递的参数。

def add(x, y):return x + y# 调用时按顺序传入参数
print(add(2, 3))  # 输出:5

关键字参数

关键字参数允许在函数调用时通过参数名称来传递参数,而不受顺序的限制。

def introduce(name, age):return f"My name is {name}, and I am {age} years old."# 使用关键字参数
print(introduce(age=30, name="Bob"))  # 输出:My name is Bob, and I am 30 years old.

4. 默认参数与关键字参数

默认参数是在函数定义时为某些参数设置默认值,这样在调用函数时可以选择性地省略这些参数。

def greet(name, message="Hello"):return f"{message}, {name}!"# 省略 message 参数
print(greet("Alice"))  # 输出:Hello, Alice!

注意事项

默认参数必须出现在位置参数的后面,否则会导致语法错误。


5. 可变长参数

Python 允许函数接收可变长参数,即传递任意数量的参数。使用 *args**kwargs 可以实现这一功能。

位置参数收集(*args)

*args 用于接收任意数量的未命名参数,并将其封装为一个元组。

def sum_numbers(*args):return sum(args)print(sum_numbers(1, 2, 3))  # 输出:6

关键字参数收集(**kwargs)

**kwargs 用于接收任意数量的关键字参数,并将其封装为一个字典。

def print_info(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_info(name="Alice", age=30, city="New York")
# 输出:
# name: Alice
# age: 30
# city: New York

6. 匿名函数(Lambda 函数)

匿名函数是没有名字的函数,使用 lambda 关键字定义。它常用于简单的场景,尤其是作为参数传递给其他函数时。

语法

lambda 参数列表: 表达式

示例:

add = lambda x, y: x + y
print(add(3, 5))  # 输出:8

lambda 函数相当于一行的简化函数定义,适用于简单操作。


7. 函数的返回值

函数通过 return 语句返回结果,return 可以返回任何类型的数据,甚至可以返回多个值。

返回单个值

def square(x):return x * xprint(square(4))  # 输出:16

返回多个值

def get_position():x = 5y = 10return x, y# 返回的是一个元组
pos = get_position()
print(pos)  # 输出:(5, 10)

8. 递归函数

递归函数是指在函数内部调用自身的函数,常用于解决分治、树结构遍历等问题。

递归函数示例:计算阶乘

def factorial(n):if n == 1:return 1else:return n * factorial(n - 1)print(factorial(5))  # 输出:120

递归函数必须包含终止条件,否则会导致无限递归,造成程序崩溃。


9. 高阶函数

高阶函数是指可以接收其他函数作为参数,或将函数作为返回值的函数。

示例:map() 函数

def square(x):return x * xnumbers = [1, 2, 3, 4, 5]
squares = map(square, numbers)print(list(squares))  # 输出:[1, 4, 9, 16, 25]

map() 函数将 square 函数应用到 numbers 列表的每个元素上。


10. 装饰器函数

装饰器是高阶函数的一种,用于在不修改原函数代码的前提下扩展其功能。装饰器常用于日志记录、性能监控等场景。

简单装饰器示例

def decorator(func):def wrapper(*args, **kwargs):print("函数调用前")result = func(*args, **kwargs)print("函数调用后")return resultreturn wrapper@decorator
def greet(name):print(f"Hello, {name}!")greet("Alice")
# 输出:
# 函数调用前
# Hello, Alice!
# 函数调用后

在上述代码中,@decoratorgreet 函数进行装饰,添加了前后打印操作。


11. 函数的作用域与闭包

作用域

Python 中的变量作用域有局部作用域、全局作用域和内嵌作用域。局部作用域的变量在函数内部可见,而全局作用域的变量在整个程序中可见。

x = 10  # 全局变量def func():x = 5  # 局部变量print(x)func()  # 输出:5
print(x)  # 输出:10

闭包

闭包是指函数内定义的函数可以访问外部函数的局部变量,即使外部函数已经执行完毕,内部函数依然可以使用这些变量。

def outer():x = 10def inner():print(x)return innerclosure = outer()
closure()  # 输出:10

12. 总结

本文详细介绍了 Python 函数的各个方面,从最基本的函数定义与调用,到复杂的递归、高阶函数和装饰器等高级概念。掌握这些知识将有助于你在实际编程中更加灵活地使用函数,从而提高代码的可读性、复用性和结构化程度。

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

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

相关文章

目标检测系列(三)yolov2的全面讲解

YOLOv2(论文原名《YOLO9000: Better, Faster, Stronger》)作为该系列的第二个版本,对原始YOLO进行了显著的改进,进一步提高了检测速度和准确度。在精度上利用一些列训练技巧,在速度上应用了新的网络模型DarkNet19&…

小阿轩yx-Ansible部署与应用基础

小阿轩yx-Ansible部署与应用基础 前言 由于互联网的快速发展导致产品更新换代速度逐步增长,运维人员每天都要进行大量的维护操作,按照传统方式进行维护使得工作效率低下。这时部署自动化运维就可以尽可能安全、高效的完成这些工作。 Ansible 概述 什…

自闭症寄宿学校陕西:提供综合发展的教育环境

星贝育园:自闭症儿童的综合发展摇篮 在自闭症儿童教育的广阔领域里,寄宿制学校以其独特的康复环境和全方位的支持体系,为这些特殊的孩子点亮了希望之灯。广州的星贝育园自闭症儿童寄宿制学校,正是这样一所充满爱心与专业的机构&a…

探索自闭症寄宿学校:为孩子的未来铺设坚实基石

探索自闭症寄宿学校:星贝育园——为孩子的未来铺设坚实基石 在自闭症儿童成长的道路上,选择一所合适的学校,无疑是为他们铺设坚实基石的关键一步。广州的星贝育园自闭症儿童寄宿制学校,以其专业的教育理念、全面的支持体系和温馨…

使用PLSQL Developer快速连接数据库

文章目录 前言一、定义设置方式二、固定用户设置方式三、连接设置方式总结前言 PLSQL Developer是一个集成开发环境,由Allround Automations公司开发,专门面向Oracle数据库存储的程序单元的开发。该工具提供了多种设置方式,便于使用者在不需要输入用户名称、密码的情况下,…

鸿蒙 如何退出 APP

terminateSelf() 停止Ability自身 在EntryAbility中这么使用 this.context.terminateSelf()在Pages页面中这么使用 import { common } from kit.AbilityKit (getContext(this) as common.UIAbilityContext)?.terminateSelf() 也可以直接封装: import common f…

查了好几天的问题终于画上了句号

问题背景: 产品接到前方实施反馈9月02日有些订单查不到签名值,对于医院验签查不到签名值,就无法完成验签数据归档。 问题追踪过程: 1 首先查数据库,发现订单id确实查不到对应的detail数据; 第一直觉是否是…

如何使用ssm实现基于Java web的高校学生课堂考勤系统的设计与实现+vue

TOC ssm686基于Java web的高校学生课堂考勤系统的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性&#x…

SpringBoot集成微信小程序Demo

一、前言 小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。 微信小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ 二、技术栈 SpringBoot 2.0MyBatis-P…

不同类型的企业该如何挑选适合的供应商管理系统?

供应商管理对企业降低成本、维持稳定的货品来源起着重要的作用,在选择供应商管理系统时,需要考虑多重因素,正所谓没有最好只有最合适,需要结合企业自身需求进行多方面考量才能做出明智的决策。 本文将对国内外制造业都在使用的供…

找最小数 - 华为OD统一考试(E卷)

2024华为OD机试(E卷D卷C卷)最新题库【超值优惠】Java/Python/C合集 题目描述 给一个正整数NUM1,计算出新正整数NUM2,NUM2为NUM1中移除N位数字后的结果需要使得NUM2的值最小。 输入描述 输入的第一行为一个字符串,字…

一款前后端分离设计的企业级快速开发平台,支持单体服务与微服务之间灵活切换(附源码)

前言 当前软件开发面临诸多挑战,诸如开发效率低下、重复工作多、维护成-本高等问题,这些问题在一定程度上阻碍了项目的进展。针对这些痛点,我们迫切需要一款既能提升开发效率又能降低维护成-本的处理方案。由此,一款基于前后端分…

【Day20240924】联邦学习中的方法 改进

文章目录 前言一、FedAvg二、FedProx三、MOON四、FedDyn五、FedAsync六、PORT七、ASO-Fed八、FedBuff九、FedSA 前言 几种异步的方法: FedAsync PORT ASO-Fed FedBuff FedSA 几种同步的方法: FedAvg FedProx MOON FedDyn 一、FedAvg FedAvg基本步骤&a…

大模型开发应用实战:真实项目实战对标各类大厂大模型算法岗技术

一、引言 在人工智能领域,大模型已经成为推动技术进步和应用创新的重要力量。随着技术的不断发展,各大厂商纷纷投入大量资源研发大模型,并尝试将其应用于各种实际场景中。为了培养具备大模型开发与应用能力的高级技术人才,我们组织…

cuda算子优化-transpose

transpose 参考链接 方法一:每个线程负责一个元素的转置 cuda代码实现 ncu分析(矩阵维度采用m1024,n512;grid和block维度见下图最上方) 这种方法对读global mem比较友好,可以做到合并访存,但…

知识产权 ABS 企业融资新渠道

在当今知识经济时代,知识产权作为企业的核心资产,其价值日益凸显。知识产权资产证券化(Intellectual Property Asset-Backed Securitization,简称知识产权ABS)作为一种创新的金融工具,为企业盘活知识产权资…

Cpp类和对象(下)(6)

文章目录 前言一、初始化列表概念使用注意实际运用explicit关键字初始化列表的总结 二、static成员static成员的概念static成员的特性static的一个实用场景 三、友元友元函数友元类 四、内部类概念特性 五、匿名对象六、再次理解封装和面向对象总结 前言 Hello,本篇…

【Oauth2整合gateway网关实现微服务单点登录】

文章目录 一.什么是单点登录?二.Oauth2整合网关实现微服务单点登录三.时序图四.代码实现思路1.基于OAuth2独立一个认证中心服务出来2.网关微服务3产品微服务4.订单微服务5.开始测试单点登录 一.什么是单点登录? 单点登录(Single Sign On&…

权威期刊Cell Discovery新成果!上海交大洪亮团队提出CPDiffusion模型,超低成本、全自动设计功能型蛋白质

蛋白质是生命活动的主要执行者,其结构与功能之间的关系一直是生命科学领域研究的核心议题。近年来,随着深度学习的兴起,借助其强大的数据处理能力,让模型学习蛋白质序列、结构及其功能之间的映射关系,设计出具备更高稳…

prithvi WxC气象模型

NASA发布了prithvi WxC气象模型发布 Prithvi是NASA开源的模型,被誉为全球最大的开源地理空间大模型。昨天晚上逛X平台,我看到Prithvi模型又来了新成员:prithvi WxC。 NASA和IBM创建了一个基于MERRA-2数据的天气和气候AI基础模型—Prithvi Wx…