【Python 函数】

Python 中的函数(Function)是可重复使用的代码块,用于封装特定功能并提高代码复用性。以下是函数的核心知识点:


一、基础语法

1. 定义函数
def greet(name):"""打印问候语"""  # 文档字符串(Docstring)print(f"Hello, {name}!")
2. 调用函数
greet("Alice")  # → Hello, Alice!

二、参数传递

1. 位置参数
def add(a, b):return a + badd(3, 5)  # → 8
2. 默认参数
def power(x, exponent=2):return x ** exponentpower(3)    # → 9(使用默认指数)
power(2, 3) # → 8(覆盖默认值)
3. 关键字参数
greet(name="Bob")  # 明确指定参数名
4. 可变参数
# *args(位置参数元组)
def sum_all(*args):return sum(args)sum_all(1, 2, 3)  # → 6# **kwargs(关键字参数字典)
def print_info(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_info(name="Alice", age=30)

三、返回值

1. 单一返回值
def square(x):return x * x
2. 返回多个值
def get_stats():return 42, "success", [1, 2, 3]  # 实际返回元组result = get_stats()  # → (42, "success", [1,2,3])

四、作用域与闭包

1. 作用域规则(LEGB)
  • Local(函数内)
  • Enclosing(嵌套函数外层)
  • Global(模块级)
  • Built-in(内置)
x = 10  # 全局变量def outer():x = 5  # 封闭作用域变量def inner():x = 1  # 局部变量print(x)inner()outer()  # → 1
print(x) # → 10
2. 闭包(Closure)
def multiplier(n):def multiply(x):return x * nreturn multiplydouble = multiplier(2)
print(double(5))  # → 10

五、装饰器(Decorator)

1. 基础装饰器
def log_time(func):def wrapper(*args, **kwargs):start = time.time()result = func(*args, **kwargs)print(f"耗时: {time.time()-start:.2f}秒")return resultreturn wrapper@log_time
def slow_function():time.sleep(2)slow_function()  # 输出耗时并返回None
2. 带参数装饰器
def repeat(num=1):def decorator(func):def wrapper(*args, **kwargs):for _ in range(num):result = func(*args, **kwargs)return resultreturn wrapperreturn decorator@repeat(num=3)
def greet():print("Hello!")greet()  # 打印3次"Hello!"

六、Lambda 函数

1. 匿名函数
square = lambda x: x ** 2
square(5)  # → 25
2. 常用场景
nums = [1, 3, 2, 5, 4]
sorted(nums, key=lambda x: -x)  # → [5,4,3,2,1](逆序排序)

七、生成器函数

1. yield 关键字
def countdown(n):while n > 0:yield nn -= 1for num in countdown(3):print(num)  # 依次打印3,2,1
2. 生成器表达式
squares = (x**2 for x in range(5))  # 生成器对象

八、递归函数

1. 基本结构
def factorial(n):if n == 0:return 1return n * factorial(n-1)
2. 尾递归优化(Python 不原生支持)
# 需手动模拟尾递归
def tail_factorial(n, acc=1):if n == 0:return accreturn tail_factorial(n-1, acc*n)

九、高级特性

1. 函数注解
def add(a: int, b: int) -> int:return a + b
2. 偏函数(Partial)
from functools import partialint_base2 = partial(int, base=2)
int_base2("1010")  # → 10
3. 协程(Coroutine)
async def fetch_data():data = await async_request()  # 异步请求return data

十、常见陷阱

  1. 可变默认参数

    def bad_append(new_item, my_list=[]):  # 危险!默认参数共享my_list.append(new_item)return my_list
    
  2. 作用域污染

    count = 0
    for count in range(5):  # 循环变量覆盖全局变量pass
    print(count)  # → 4(而非预期的0)
    
  3. 递归深度限制

    # 默认递归深度约1000层
    def deep_recursion(n):if n == 0:returndeep_recursion(n-1)deep_recursion(2000)  # → RecursionError
    

通过掌握这些内容,可以构建模块化、可维护的代码结构。实际应用中需根据需求选择合适的函数类型,并注意作用域管理和性能优化。

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

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

相关文章

7. HTML 表格基础

表格是网页开发中最基础也最实用的元素之一,尽管现代前端开发中表格布局已被 CSS 布局方案取代,但在展示结构化数据时,表格依然发挥着不可替代的作用。本文将基于提供的代码素材,系统讲解 HTML 表格的核心概念与实用技巧。 一、表格的基本结构 一个完整的 HTML 表格由以下…

极狐GitLab 命名空间的类型有哪些?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 命名空间 命名空间在极狐GitLab 中组织项目。因为每一个命名空间都是单独的,您可以在多个命名空间中使用相同的项…

powershell批处理——io校验

powershell批处理——io校验 在刷题时,时常回想,OJ平台是如何校验竞赛队员提交的代码的,OJ平台并不看代码,而是使用“黑盒测试”,用测试数据来验证。对于每题,都事先设定了很多组输入数据(data…

前端面经-webpack篇--定义、配置、构建流程、 Loader、Tree Shaking、懒加载与预加载、代码分割、 Plugin 机制

看完本篇你将基本了解webpack!!! 目录 一、Webpack 的作用 1、基本配置结构 2、配置项详解 1. entry —— 构建入口 2. output —— 输出配置 3. mode:模式设置 4. module:模块规则 5. plugins:插件机制 6. resolve:模块解析配置(可选) 7. devServer:开发服务器…

面试算法刷题练习1(核心+acm)

3. 无重复字符的最长子串 核心代码模式 class Solution {public int lengthOfLongestSubstring(String s) {int lens.length();int []numnew int[300];int ans0;for(int i0,j0;i<len;i){num[s.charAt(i)];while(num[s.charAt(i)]>1){num[s.charAt(j)]--;j;}ansMath.max…

拉削丝锥,螺纹类加工的选择之一

在我们的日常生活中&#xff0c;螺纹连接无处不在&#xff0c;从简单的螺丝钉到复杂的机械设备&#xff0c;都离不开螺纹的精密加工。今天&#xff0c;给大家介绍一种的螺纹刀具——拉削丝锥&#xff1a; 一、拉削丝锥的工作原理 拉削丝锥&#xff0c;听起来有点陌生吧&#…

数据清洗-电商双11美妆数据分析(二)

1.接下来用seaborn包给出每个店铺各个大类以及各个小类的销量销售额 先观察销量&#xff0c;各店小类中销量最高的是相宜本草的补水类商品以及妮维雅的清洁类商品&#xff0c;这两类销量很接近。而销售额上&#xff0c;相宜本草的补水类商品比妮维雅的清洁类商品要高得多&#…

【上位机——MFC】对话框

对话框的使用 1.添加对话框资源 2.定义一个自己的对话框类(CMyDlg)&#xff0c;管理对话框资源&#xff0c;派生自CDialog或CDialogEx均可 对话框架构 #include <afxwin.h> #include "resource.h"class CMyDlg :public CDialog {DECLARE_MESSAGE_MAP() publi…

2025东三省C题深圳杯C题数学建模挑战赛数模思路代码文章教学: 分布式能源接入配电网的风险分析

完整内容请看文章最下面的推广群 数据整理与分析 表1&#xff1a;有源配电网62节点系统负荷参数 内容&#xff1a;列出了62个节点的有功负荷&#xff08;单位&#xff1a;kW&#xff09;。 特点&#xff1a; 负荷范围&#xff1a;24 kW&#xff08;节点19&#xff09;到420 …

【人工智能】边缘计算技术及应用概述

边缘计算&#xff08;Edge Computing&#xff09;是一种分布式计算范式&#xff0c;其核心思想是将数据处理、存储和计算能力从传统的云端数据中心下沉到靠近数据源的边缘设备&#xff08;如传感器、摄像头、工业设备等&#xff09;或边缘服务器。这种架构旨在减少数据传输延迟…

FAISS(Facebook AI Similarity Search)

First steps with Faiss for k-nearest neighbor search in large search spaces - Davide’s GitHub pages FAISS&#xff08;Facebook AI Similarity Search&#xff09;是由Meta&#xff08;原Facebook&#xff09;AI团队开发的高效相似性搜索库&#xff0c;主要用于处理大规…

嵌入式开发学习日志Day15

一、指针指向字符型数组 &#xff08;1&#xff09;【const】&#xff1a;在指针变量中使用时&#xff0c;无法通过该指针修改被指向的变量&#xff1b; &#xff08;2&#xff09;【const】&#xff1a;关键字&#xff0c;在C和C中&#xff0c;能加就加&#xff0c;加了一定…

现代卷积神经网络

一、网络中的网络 (NiN: Network in Network) 参考&#xff1a;Network In Network——卷积神经网络的革新 - 殷大侠 - 博客园 深度学习&#xff08;二十六&#xff09;Network In Network学习笔记-CSDN博客 ① MLPconv 层 参考&#xff1a;深度学习基础模型NIN(Network in Net…

【大模型面试每日一题】Day 11:参数高效微调方法(如LoRA、Adapter)的核心思想是什么?相比全参数微调有何优缺点?

【大模型面试每日一题】Day 11&#xff1a;参数高效微调方法&#xff08;如LoRA、Adapter&#xff09;的核心思想是什么&#xff1f;相比全参数微调有何优缺点&#xff1f; &#x1f4cc; 题目重现 &#x1f31f;&#x1f31f; 面试官&#xff1a;参数高效微调方法&#xff0…

SSL泄露源IP怎么办?(教学与防护)

在网络安全领域&#xff0c;源IP地址的保护至关重要。通常情况下&#xff0c;我们借助CDN&#xff08;内容分发网络&#xff09;技术来隐藏源IP&#xff0c;使外部通过常规的ping命令无法获取。然而&#xff0c;由于部分网站模板存在漏洞&#xff0c;当用户访问https://ip时&am…

jQuery的学习要领

学习 jQuery 的关键要领可以分为以下几个核心部分&#xff0c;帮助你高效掌握并灵活运用&#xff1a; 1. 理解 jQuery 的核心思想 "Write Less, Do More"&#xff1a;jQuery 通过简洁的语法封装复杂操作。 链式调用&#xff08;Chaining&#xff09;&#xff1a;通过…

网络安全的原理和基本知识点

以下是网络安全的基本原理和知识点&#xff0c;以及如何利用Python进行网络安全防护&#xff1a; 网络安全的基本原理和知识点 基本概念 网络安全&#xff1a;保护网络系统和数据免受攻击、损坏或未经授权的访问&#xff0c;确保其机密性、完整性和可用性。 CIA三要素 机密…

AI:机器学习之无监督学习

无监督学习:让机器从“混沌”中自我觉醒 🧠🌌 🧭 摘要:无监督学习(Unsupervised Learning)是机器学习的重要分支,它不依赖于人工标签,通过自身“感知”数据结构来发现潜在模式。本文系统梳理了其核心概念、典型算法、实际应用与代码实战,既适合入门学习,也适用于…

写了个脚本将pdf转markdown

看到有人需要将扫描pdf文档转markdown&#xff0c;想起之前写的一个小工具。 这个脚本是为了将pdf转成markdown&#xff0c;只需要申请一个智谱的api key&#xff0c;并填到config里&#xff0c;使用的模型是4v flash&#xff0c;免费的&#xff0c;所以可以放心使用。 效果如下…

CSS--图片链接水平居中展示的方法

原文网址&#xff1a;CSS--图片链接居中展示的方法-CSDN博客 简介 本文介绍CSS图片链接水平居中展示的方法。 图片链接 问题复现 源码 <html xml:lang"cn" lang"cn"><head><meta http-equiv"Content-Type" content"te…