python基础-函数
目录一.定义函数和调用1.1.global关键字1.2.函数的参数可变参数与固定参数1.3.参数混用可变参数、有无默认值参数二.map()函数与lambda表达式2.1 map()将序列中的每个元素进行函数定义的操作2.2 lambda表达式三 变量的作用域问题四. 函数内部对传入的参数的影响一、可变对象修改内容会影响外部1. 列表2. 字典3. 自定义类实例二、不可变对象任何修改都只会创建新对象1. 整数2. 字符串3. 元组三、关键区分修改内容 vs 重新绑定变量一.定义函数和调用定义一个函数的格式def函数名(参数1,参数2,...,参数n):#函数实现return...#函数返回值可以不要实例定义求和函数与调用defcal_sum(n):msum0foriinrange(n1):msumireturnmsum num10print(the sum from 0 to %d %d%(num,cal_sum(num)))输出为the sum from 0 to 10 551.1.global关键字global关键字将函数内的局部变量的作用域变为全局即为全局变量和c/c相比可以在函数内部定义全局变量例1函数外已有与局部变量的同名变量count0defincrement():globalcount count10print(函数内部,id(count),; couunt ,count)increment()print(全局,id(count),; couunt ,count)打印结果通过global修饰局部变量二者的内存相同函数内部 140703368747056 ; couunt 10全局 140703368747056 ; couunt 10若是函数内部无global count声明coun仍为全局变量函数内部可用但是count 10将会创建局部变量count。例2函数外无与局部变量的同名变量defincrement():globalcount count10print(函数内部,id(count),; couunt ,count)increment()print(全局,id(count),; couunt ,count)打印结果内部的局部变量此时实际上已是一个全局变量函数内部 140703368747056 ; couunt 10全局 140703368747056 ; couunt 10例3无globalcount0defincrement():count10print(函数内部,id(count),; couunt ,count)increment()print(全局,id(count),; couunt ,count)打印结果函数内部 140703368747056 ; couunt 10全局 140703368746736 ; couunt 01.2.函数的参数可变参数与固定参数固定参数的默认值defaddTwoNum(n1,n2,n30):print(n1%d,n2%d,n3%d%(n1,n2,n3))returnn1n2n3默认值参数必须放在无默认值参数之后否则会报错。可变参数基于元组的可变参数即位置参数形式为fun(*arg)如下defcalc(*numbers):#可变参数print(numbers)sum0forninnumbers:sumsumn*nreturnsumprint(calc())print(calc(1))print(calc(1,2))print(calc(1,2,3))nums[1,3,5,7,9]print(calc(*nums))#对于一个list或者tuple可直接用这种形式打印结果The tuple is: ()0The tuple is: (1,)1The tuple is: (1, 2)5The tuple is: (1, 2, 3)14The tuple is: (1, 3, 5, 7, 9)165基于字典的可变参数即关键字参数形式为fun(**arg)如下defshow_info(**info):print(The dictionary is,info)forkey,valueininfo.items():#info可看成字典所以可以用字典的方法print({} - {}.format(key,value))show_info(genderM,namexxp)show_info(genderM,namexxp,age18)dir1{name:zhang,age:55}show_info(**dir1))#对于一个字典来说可直接用这种形式打印结果The dictionary is {‘gender’: ‘M’, ‘name’: ‘xxp’}gender - Mname - xxpThe dictionary is {‘gender’: ‘M’, ‘name’: ‘xxp’, ‘age’: 18}gender - Mname - xxpage - 18The dictionary is {‘name’: ‘zhang’, ‘age’: 55}name - zhangage - 55参考1.3.参数混用可变参数、有无默认值参数当函数同时包含无默认值参数、有默认值参数、*args、**kwargs时必须严格按以下顺序定义无默认值参数 → 有默认值参数 → *args → **kwargs1 什么是关键字参数指调用函数时通过 paramvalue 形式传入的参数。deffunc(a,b2):# b 是有默认值的参数print(a,b)# 按位置传递b 此时是位置参数func(1,3)# 输出1 3b 被位置参数 3 覆盖# 按关键字传递b 此时是关键字参数func(1,b4)# 输出1 4b 被关键字参数覆盖# 省略 b使用默认值此时 b 既不是位置也不是关键字参数仅用默认值func(1)# 输出1 22 * 后的参数要传值则必须用关键字形式传递即key ** 的形式deffunc(a,*,b2,c):# * 后b 有默认值c 无默认值print(a,b,c)# 正确* 后的参数必须用关键字传递func(1,b3,c4)# 输出1 3 4func(1,c5)# 输出1 2 5b 用默认值仍需关键字传递或省略# 错误* 后的参数用位置传递func(1,3,4)# 报错b 和 c 被当作位置参数不符合强制关键字要求func(1,b3)# 报错缺少关键字参数 c 3 参数混用参数顺序为普通位置参数无默认值→ 普通参数有默认值→# 有默认值的必须在后面否则报错*args可变位置参数→# 这之后的参数传参必须用关键字形式传参否则报错关键字参数可带可不带默认值强制关键字参数→# 有无默认值的顺序不重要因为是关键字参数**kwargs可变关键字参数# 必须在参数最后面否则报错函数示例deffunc(a,# 1. 普通位置参数无默认值必传b2,# 2. 普通参数有默认值可选*args,# 3. 可变位置参数接收剩余位置参数c3,# 4. 强制关键字参数可带默认值必须用关键字传d,# 5. 强制关键字参数无默认值必须用关键字传**kwargs# 6. 可变关键字参数接收剩余关键字参数):print(fa{a}, b{b}, args{args}, c{c}, d{d}, kwargs{kwargs})func(1,2,3,c3,d4,e5)func(1,2,3,d4,e5)# c使用默认值func(1,2,3,d4,c3,e5)# c d谁先赋值都无所谓func(1,2,3,e5,d4,c3)# e做为可变参数位置在关键字参数里也不重要打印结果a1,b2,args(3,),c3,d4,kwargs{e:5}a1,b2,args(3,),c3,d4,kwargs{e:5}a1,b2,args(3,),c3,d4,kwargs{e:5}a1,b2,args(3,),c3,d4,kwargs{e:5}二.map()函数与lambda表达式2.1 map()将序列中的每个元素进行函数定义的操作举例如下defmulty2(n):returnn*2nums[1,3,5,7,9]iteratormap(multy2,nums)print(iterator)#返回的是物理地址print(list(iterator))#打印结果print(list(iterator))打印结果map object at 0x0000022BA1740F10[2, 6, 10, 14, 18][]不难发现map返回值取完之后就变空了,这一点暂时不明白待后面研究map()参考2.2 lambda表达式也叫lamba函数是一个匿函数名函数基本语法lambda argument_list:expersion可以和函数一样使用fmulti2lambdax:x*2print(fmulti2(4))#打印结果为8print((lambdax:x*2)(4))#打印结果为8前者把lambda表达式赋值给变量此时变量就相当于函数名后者直接在后面接参数就和普通函数一样。结合一些内置函数使用比如上面的map()函数nums[1,3,5,7,9]itemap(lambdan:n*2,nums)foriinite:#map()函数返回值的另一种打印方式print(i)打印结果26101418lambda函数参考三 变量的作用域问题如下main中定义的“nusc”对象可以在此文件中的其他函数中直接使用。是全局作用域原因是在 Python 中if 语句块不会创建新的作用域它使用的是所在位置的当前作用域。在下面的代码里ifname ‘main’: 这一块直接位于模块的顶层没有包在任何函数或类中因此其内部定义的 nusc 实际上是模块的全局变量。defrender_sample_data()-None:...lidiar_render(sample_toekn,pred_data,out_pathout_path)samplenusc.get(sample,sample_toekn)...if__name____main__:...nuscNuScenes(versionv1.0-mini,dataroot./data/nuscenes,verboseTrue)#xxp...隐患如果这个模块.py被其他脚本 import那么 ifname ‘main’: 下的代码不会执行nusc 就根本没有定义。此时若调用 render_sample_data()会抛出 NameError: name ‘nusc’ is not defined。四. 函数内部对传入的参数的影响函数内部的实现对传入变量是否有影响关键在于传入的是可变对象 vs 不可变对象。一、可变对象修改内容会影响外部1. 列表defmodify_list(lst):lst.append(4)# 修改列表内部的内容lst[0]100# 同样是修改内容a[1,2,3]modify_list(a)print(a)# [100, 2, 3, 4] ← 外部被改变解释lst和外部a指向同一个列表对象append和索引赋值都是修改这个对象本身。2. 字典defmodify_dict(d):d[new_key]new_value# 修改字典内容info{name:Alice}modify_dict(info)print(info)# {name: Alice, new_key: new_value}同样字典也是可变对象函数内添加键值对直接反映到外部。3. 自定义类实例classNode:def__init__(self,val):self.valval self.nextNonedefchange_node(n):n.val999# 修改对象属性n.nextlinked# 修改对象属性nodeNode(10)change_node(node)print(node.val,node.next)# 999 linked二、不可变对象任何修改都只会创建新对象1. 整数defadd_one(x):xx1# 创建新的整数对象重新绑定局部变量 xa10add_one(a)print(a)# 10不变x x 1并不是修改原来的10而是计算出一个新整数11然后让局部变量x指向它。外部a依然指向10。2. 字符串defadd_str(s):ss world# 同样生成新字符串并重新绑定greetinghelloadd_str(greeting)print(greeting)# hello不变字符串是不可变的任何拼接操作都会产生新字符串。3. 元组defmodify_tuple(t):# t[0] 999 # 会直接报错因为元组不可变t(4,5,6)# 只是重新绑定局部变量tup(1,2,3)modify_tuple(tup)print(tup)# (1, 2, 3)元组本身不能修改内容t (4,5,6)只是让局部变量指向新元组不影响外部。三、关键区分修改内容 vs 重新绑定变量同一个可变对象也有“重新绑定”的问题defreassign_list(lst):lst[7,8,9]# 重新绑定不是修改原列表lst.append(10)a[1,2,3]reassign_list(a)print(a)# [1, 2, 3] ← 完全没有被改变解释lst [7,8,9]把局部变量lst指向了一个全新的列表对象从此与外部a没有任何关系。后面的append也是在新列表上操作。只有通过lst.append()、lst[0] ...这类不改变变量绑定的操作才能影响外部传入的同一个对象。一句话总结可变对象 修改内容→ 外部看得见变化。不可变对象 / 可变对象 重新绑定变量→ 外部看不见变化。

相关新闻

BilibiliDown完整教程:轻松下载B站高清视频与无损音频

BilibiliDown完整教程:轻松下载B站高清视频与无损音频

BilibiliDown完整教程:轻松下载B站高清视频与无损音频 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/b…

2026/10/20 15:53:35 阅读更多 →
从实验室到产品:Inflect-Nano-v2的评估指标体系与真实场景验证

从实验室到产品:Inflect-Nano-v2的评估指标体系与真实场景验证

从实验室到产品:Inflect-Nano-v2的评估指标体系与真实场景验证 【免费下载链接】Inflect-Nano-v2 项目地址: https://ai.gitcode.com/hf_mirrors/owensong/Inflect-Nano-v2 Inflect-Nano-v2作为一款先进的TTS模型,其从实验室原型到产品化落地的过…

2026/10/19 5:35:40 阅读更多 →
如何免费实现专业级虚拟背景:OBS背景移除插件完整指南

如何免费实现专业级虚拟背景:OBS背景移除插件完整指南

如何免费实现专业级虚拟背景:OBS背景移除插件完整指南 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://…

2026/10/19 18:03:07 阅读更多 →

最新新闻

高效论文汇总指南:筛选标准与自动化实践

高效论文汇总指南:筛选标准与自动化实践

做机器学习研究,每天都得跟论文打交道。arXiv 的 cs.LG 分类,2026年10月5日这一天又贴出了几百篇新投稿,题目横跨生成模型、大模型推理、强化学习、表格数据、多模态等一堆方向。这个“汇总”并不是把当天所有论文标题平铺出来,而…

2026/10/20 21:39:40 阅读更多 →
具身智能论文检索工具的构建:从数据聚合到前端筛选

具身智能论文检索工具的构建:从数据聚合到前端筛选

1. 项目概述:一个科研工具的诞生先说结论:这个小网页解决的是“论文检索”这个痛点在具身智能这个细分领域的落地问题。它不是又一个大而全的学术搜索引擎,也不是复杂到需要专门培训的文献管理平台,而是针对具身智能这个AI分支&am…

2026/10/20 21:39:40 阅读更多 →
国产CAD平台下AI图元识别:从DXF实体到工程语义的落地实践

国产CAD平台下AI图元识别:从DXF实体到工程语义的落地实践

1. 从"画得出"到"读得懂":AI图元识别到底在解决什么问题干了十几年CAD相关的工作,我最大的感受是:图纸画得再漂亮,如果机器读不懂,那它就只是一张"电子蓝图",价值有限。过去…

2026/10/20 21:39:40 阅读更多 →
arXiv cs.LG每日速览:大模型与生成模型热点精选

arXiv cs.LG每日速览:大模型与生成模型热点精选

2026年10月5日的arXiv cs.LG列表,我今天从头翻了一遍。新提交加交叉投稿一起粗算接近七百条,其中cs.LG主分类的论文大概四百出头。这个量级下,想靠眼睛一篇篇刷完不现实,所以我过完列表以后,按方向挑出几篇值得认真读的…

2026/10/20 21:39:40 阅读更多 →
Strata 部署 Qwen3.8-Flash-Next 推理调优实战

Strata 部署 Qwen3.8-Flash-Next 推理调优实战

1. 从“跑起来”到“跑得稳”:Strata 与 Qwen3.8-Flash-Next 的适配逻辑第一次看到“Strata跑Qwen3.8-Flash-Next”这个组合,很多人脑子里冒出来的第一个念头大概是:这俩东西到底谁适配谁?是 Strata 作为推理框架去加载 Qwen3.8-F…

2026/10/20 21:39:39 阅读更多 →
遥感目标检测新范式:YOLO+DeepSeek实现从检测到结论

遥感目标检测新范式:YOLO+DeepSeek实现从检测到结论

做遥感图像处理的同行应该都有这个体会:模型跑完一张场景图,输出一堆检测框,框上标着“舰船”“车辆”“储油罐”,看起来是那么回事,但业务方拿到结果后还会追着问——这块区域目标密度为什么这么高、有什么聚集规律、…

2026/10/20 21:38:32 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →