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

在有Java基础上学Python(下)

函数

Python也有关于函数的概念,官方文档可以查看一些官方函数,也可以在命令行通过help(函数名),查看函数的帮助信息

求绝对值的函数abs
>>> abs(100)
100
>>> abs(-20)
20
>>> abs(12.34)
12.34注意调用函数的时候,如果传入的参数数量不对,会报TypeError错误,并且会提示>>> abs(1, 2)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: abs() takes exactly one argument (2 given)

也可以自己定义函数,在python中,定义函数要使用def语句,依次写出函数名,括号,括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回

def my_abs(x):if x >= 0:return xelse:return -xprint(my_abs(-99))空函数
def nop():passisinstance()函数可以对参数类型做检查,只允许整数和浮点型类型的参数
def my_abs(x):if not isinstance(x, (int, float)):raise TypeError('bad operand type')if x >= 0:return xelse:return -x
如果添加了参数检查之后,如果传入错误的参数类型,函数就会抛出一个异常
>>> my_abs('A')
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<stdin>", line 3, in my_abs
TypeError: bad operand type

注意使用递归函数的优点是定义简单,逻辑清晰,理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰,所以注意防止栈溢出,在计算机中,函数调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

而解决递归调用栈溢出的方法是通过尾递归优化,实际上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数。尾递归,是指在函数返回时,调用自身本身,而且,return语句不能包含表达式,这样编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

map/reduce

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

def f(x):
return x>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

reduce是将一个函数作用在一个序列上,这个函数必须接收两个函数,reduce把结果和序列的下一个元素做积累计算,其效果就是

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

B比如说一个序列求和,就可以用reduce实现

>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

filter

filter函数入参接收一个函数和一个序列,根据返回值是true还是false,决定来保留还是丢弃该元素
在list中,删掉偶数,只保留奇数

def is_odd(n):return n % 2 == 1list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]

后面关于io以及线程,内容基本一样,不做过多深入

http://www.jsqmd.com/news/519004/

相关文章:

  • 在对话历史压缩中,OpenClaw 采用了哪种摘要策略?是固定长度截断还是自适应摘要?
  • GeoServer自动化运维实践:Python脚本驱动,构建地理数据发布流水线
  • C语言核心概念与基础语法全方位深度解析,一文全掌握
  • IoU与Precision、Recall的关系:在目标检测任务中如何平衡这些指标?
  • 陀螺与加表allan方差分析方法研究及5个系数结果拟合探究
  • OpenClaw 的模型训练是否使用了课程学习?如何设计任务难度渐进策略?
  • 科技公司发Token当激励,Token到底是什么?
  • Python实战:用递归和回溯算法玩转迷宫游戏(附可视化路径)
  • Matlab隐函数绘图避坑指南:从fimplicit到三维曲面实战
  • 手把手教你用Ollama在Linux服务器上部署大模型,5分钟搞定远程调用(含SSH端口转发教程)
  • C++与C语言的区别和联系,及其在不同领域的应用分析
  • 从入门到精通:UV 现代 Python 包管理器全命令详解与实战指南
  • 对于非结构化数据(如 PDF、网页),OpenClaw 的解析和预处理流程包含哪些步骤?
  • OddAgent:从0到1打造你自己的智能家居语音助手
  • 前端框架:AngularVSReact,哪一个更适合你的项目
  • 2026年厦门GEO服务商深度测评:从技术到效果的实用选型指南 - 小白条111
  • YOLOv5训练中混淆矩阵与终端输出不一致?一文搞懂背后的计算逻辑
  • 鸿蒙OS+UniApp文件上传实战:5分钟搞定图片压缩与分片上传(附完整代码)
  • Langchain4j 1.1.0 + DeepSeek API:5分钟搞定Java AI服务接入与结构化输出配置
  • 2026年广州靠谱GEO优化公司深度测评与避坑指南:从产业适配到效果落地的实战分析 - 小白条111
  • HTML5标签
  • 测频法 vs 测周法:STM32测量频率,到底该选哪个?从原理到代码的深度对比
  • FamNet实战:如何用少量标注实现通用物体计数(附FSC-147数据集解析)
  • 2026年深圳GEO优化服务商深度分析:从技术底层到效果落地的实战测评 - 小白条111
  • 从Swin到MaxViT:盘点那些在工业界真正‘能打’的CNN-Transformer混合架构
  • 前端后端融合:AI大数据如何加速开发效率提升
  • RK3588平台imx415传感器ISP在线调试实战手记
  • 从零到一:基于ENSP与MPLS-VPN的企业级网络架构实战设计
  • 用Coze工作流3步搞定B站视频文案改写:从采集到爆款生成全流程
  • FPGA代码设计:线性调频模块 使用DDS IP开发的线性调频模块,支持四种线性调频,频率低到...