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

Python函数全解析

Python 函数详解

函数是 Python 编程的核心,用于封装可重用的代码块。以下是函数的全面解析:


1. 函数定义

使用 def 关键字定义函数:

def greet(name):  # name 是参数"""打印问候语(文档字符串)"""print(f"Hello, {name}!")

2. 函数调用

通过函数名和参数调用:

greet("Alice")  # 输出: Hello, Alice!

3. 参数类型
类型说明示例
位置参数按顺序传递func(a, b)
关键字参数指定参数名传递func(b=2, a=1)
默认参数定义时指定默认值def func(a=0):
可变参数接收任意数量参数def func(*args):
关键字可变参数接收任意键值对def func(**kwargs):

4. 返回值

return 返回结果(默认返回 None):

def add(a, b):return a + bresult = add(3, 5)  # result = 8

5. 作用域
  • 局部变量:函数内定义的变量(仅在函数内有效)
  • 全局变量:函数外定义的变量(需用 global 在函数内修改)
x = 10  # 全局变量def modify():global xx = 20  # 修改全局变量y = 5   # 局部变量modify()
print(x)  # 输出: 20
print(y)  # 报错: y 未定义

6. Lambda 函数

匿名函数,用于简单操作:

square = lambda x: x ** 2
print(square(4))  # 输出: 16

7. 递归函数

函数调用自身:

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

8. 函数注解

添加类型提示(Python 3.5+):

def multiply(a: int, b: int) -> int:return a * b

9. 闭包

内部函数记住外部作用域的变量:

def outer(x):def inner(y):return x + yreturn innerclosure = outer(10)
print(closure(5))  # 输出: 15

10. 装饰器

修改函数行为(不改变原函数代码):

def logger(func):def wrapper(*args):print(f"调用函数: {func.__name__}")return func(*args)return wrapper@logger
def say_hello(name):print(f"Hello, {name}!")say_hello("Bob")
# 输出: 
# 调用函数: say_hello
# Hello, Bob!

11. 生成器函数

yield 返回迭代器:

def count_down(n):while n > 0:yield nn -= 1for num in count_down(3):print(num)  # 输出: 3, 2, 1

关键特性总结
特性说明
可重用性避免重复代码
模块化将复杂任务分解为小函数
参数灵活支持多种参数传递方式
作用域隔离局部变量不影响全局环境
一等公民函数可作为参数传递、赋值给变量或作为返回值

掌握这些概念,能显著提升代码的清晰度和维护性!

http://www.lryc.cn/news/590743.html

相关文章:

  • 横向移动(中)
  • 使用YOLOv11实现水果类别检测:从数据到模型训练的全过程
  • 每日钉钉API探索:getAuthCode实现免登授权
  • 测试工作中的质量门禁管理
  • Maven入门指南:生命周期、阶段和执行顺序详解
  • 基于FPGA的IIC控制EEPROM读写(1)
  • 项目流程管理系统使用建议:推荐13款
  • 华为OD机试_2025 B卷_完美走位(Python,100分)(附详细解题思路)
  • ES组合使用must与should时的注意事项
  • 【LeetCode刷题指南特别篇】--移除链表元素,调试技巧,链表分割
  • Linux4:线程
  • TRAE + Milvus MCP:用自然语言 0 门槛玩转向量数据库
  • OpenVela之 Arch Timer 驱动框架使用指南
  • UltraISO编辑ISO文件
  • Karate(Java)接口自动化测试框架
  • 二刷 黑马点评 分布式锁-redission
  • 基于Canal实现MySQL数据库数据同步
  • Alamofire 网络请求全流解析,通俗易懂
  • ai 编程工具,简单总结
  • Python脚本批量修复文件时间戳,根据文件名或拍摄日期
  • 达梦数据库CASE_SENSITIVE大小写敏感差异比较
  • 字段级权限控制场景中,RBAC与ABAC的性能差异
  • 【机器学习【6】】数据理解:数据导入、数据审查与数据可视化方法论
  • [NOIP][C++] 树的重心
  • 嵌入式单片机开发实战指南: 从RISC-V到TinyML全栈技术
  • 筑牢网络安全防线:DDoS/CC 攻击全链路防护技术解析
  • 权限隔离设计中实现字段级别的动态隐藏
  • 工作第一步建立连接——ssh
  • 【JavaScript】从事件流到事件委托
  • 再探多线程Ⅰ--- (创建思路+核心方法+代码样例)