当前位置: 首页 > news >正文

Python函数:全面教程

目录

  1. 函数简介
  2. 基本函数语法
  3. 函数参数
  4. 返回值
  5. 高级函数概念
  6. 列表推导式与Lambda函数
  7. 实用示例

函数简介

函数是可重用的代码块,用于执行特定任务。它们有助于组织代码,促进复用,并使程序更易于维护。可以将函数视为程序中的小型程序。

基本函数语法

在Python中定义函数的基本语法如下:

def function_name(parameters):# 函数体# 要执行的代码return value  # 可选

示例:

def greet(name):return f"Hello, {name}!"# 调用函数
message = greet("Alice")
print(message)  # 输出: Hello, Alice!

函数参数

默认参数

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

位置参数与关键字参数

def create_profile(name, age, occupation):return f"Name: {name}, Age: {age}, Occupation: {occupation}"# 使用位置参数
print(create_profile("Alice", 30, "Engineer"))# 使用关键字参数
print(create_profile(age=30, name="Alice", occupation="Engineer"))

*args 和 **kwargs

def print_all(*args, **kwargs):# 打印位置参数for arg in args:print(f"位置参数: {arg}")# 打印关键字参数for key, value in kwargs.items():print(f"关键字参数: {key} = {value}")print_all(1, 2, 3, name="Alice", job="Developer")

返回值

函数可以返回单个值、多个值,或什么都不返回(默认返回None)。

# 多个返回值
def get_coordinates():x = 10y = 20return x, y# 返回值为元组
gx_coord, y_coord = get_coordinates()
print(f"X: {x_coord}, Y: {y_coord}")# 提前返回
def check_number(n):if n < 0:return "负数"elif n > 0:return "正数"return "零"

高级函数概念

嵌套函数

def outer_function(x):def inner_function(y):return x + yreturn inner_function# 创建闭包
add_five = outer_function(5)
print(add_five(3))  # 输出: 8

装饰器

def timer_decorator(func):from time import timedef wrapper(*args, **kwargs):start = time()result = func(*args, **kwargs)end = time()print(f"函数 {func.__name__} 用时 {end - start:.2f} 秒")return resultreturn wrapper@timer_decorator
def slow_function():import timetime.sleep(1)return "完成!"slow_function()

列表推导式与Lambda函数

列表推导式

列表推导式提供了一种基于现有序列创建新列表的简洁方式。

# 基本列表推导式
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 带条件的列表推导式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # [0, 4, 16, 36, 64]# 嵌套列表推导式
matrix = [[i+j for j in range(3)] for i in range(3)]
print(matrix)  # [[0, 1, 2], [1, 2, 3], [2, 3, 4]]

Lambda函数

Lambda函数是可以内联定义的小型匿名函数。

# 基本lambda函数
square = lambda x: x**2
print(square(5))  # 25# 多参数lambda
add = lambda x, y: x + y
print(add(3, 4))  # 7# lambda结合列表推导和map
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x*2, numbers))
print(doubled)  # [2, 4, 6, 8, 10]

实用示例

数据处理函数

def process_data(data, filters=None, transform=None):"""使用可选的过滤和转换处理数据列表。参数:data: 要处理的值列表filters: 要应用的过滤函数列表transform: 应用于过滤后数据的转换函数"""result = data# 如果有过滤器则应用if filters:for filter_func in filters:result = [item for item in result if filter_func(item)]# 如果有转换则应用if transform:result = [transform(item) for item in result]return result# 示例用法
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
is_even = lambda x: x % 2 == 0
is_greater_than_five = lambda x: x > 5
double = lambda x: x * 2# 使用过滤和转换处理数据
result = process_data(numbers,filters=[is_even, is_greater_than_five],transform=double
)
print(result)  # [12, 16, 20]

函数中的错误处理

def safe_divide(a, b):"""安全地进行除法运算并处理错误。"""try:result = a / bexcept ZeroDivisionError:print("错误: 除数为零!")return Noneexcept TypeError:print("错误: 除法类型无效!")return Noneelse:return resultfinally:print("尝试了除法操作")# 示例用法
print(safe_divide(10, 2))    # 5.0
print(safe_divide(10, 0))    # None(带错误信息)
print(safe_divide(10, "2"))  # None(带错误信息)

生成器函数

def fibonacci_generator(n):"""生成n个斐波那契数。"""a, b = 0, 1count = 0while count < n:yield aa, b = b, a + bcount += 1# 使用生成器
fib = fibonacci_generator(10)
fibonacci_list = list(fib)
print(fibonacci_list)  # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

本教程涵盖了Python函数的基础和高级概念。通过修改示例和编写自己的函数来练习这些概念。记住,函数是组织代码、提高可维护性和复用性的强大工具。

http://www.lqws.cn/news/453871.html

相关文章:

  • 【秒杀系统设计】
  • Logback 在java中的使用
  • VS2022 C#【自动化文件上传】AutoFileUpload 新需求 V13
  • 从“数据困境”到“数据生态”:DaaS重塑三甲医院医疗数据治理
  • android 渲染流水线中的两个重要阶段:swapBuffers 和 DrawFrames
  • Unity技能编辑器深度构建指南:打造专业级战斗系统
  • 项目开发中途遇到困难的解决方案
  • 跑步还是快速走,瘦身分享
  • 【unitrix】 3.4 类型级逻辑运算(bit.rs)
  • 广州AR公司诚推广州华锐互动​
  • 常用 Docker 命令整理
  • 设置vscode使用eslint
  • SynchronizedMap 和 ConcurrentHashMap 的区别
  • EfficientVLA:面向视觉-语言-动作模型无训练的加速与压缩
  • Xilinx XC7A12T‑1CPG238I Artix‑7 FPGA
  • 08-Python文件处理
  • MySQL EXPLAIN中的key_len终极指南:精准掌握索引使用情况
  • 【unitrix】 3.5 类型级别的比较系统(cmp.rs)
  • 【机器学习实战笔记 12】集成学习:AdaBoost算法
  • 分布式系统中的 Kafka:流量削峰与异步解耦(二)
  • 高性能群集部署技术-Nginx+Tomcat负载均衡群集
  • Docker Swarm
  • 如何轻松地将音乐从 iPhone 传输到 Mac?
  • Element UI 表格中实现搜索关键字高亮的
  • 华为OD机考-亲子游戏-BFS(JAVA 2025B卷 200分)
  • OCCT基础类库介绍:Modeling Algorithm - Sewing
  • 如何正确处理音频数据:16位整数与32位浮点数
  • Agent轻松通-P3:分析我们的Agent
  • CppCon 2017 学习:Mocking Frameworks Considered
  • 您的元服务存在问题,不符合元服务UX设计规范