写程序最忌讳的就是复制粘贴—— 同一段代码贴三遍改起来要改三处累不说还容易漏。Python 给出的答案是函数把一段会重复用的代码 封装 起来起个名字想用就调用。一、为什么用函数print()其实就是个函数。函数的好处让程序变短变清晰、提高复用性和效率、便于分工协作和维护。看这个场景 —— 要打印 5 行*如果每次都写一遍for i in range(6): print(*********)就冗余了。封装成函数后想打印就调用一次。二、函数的定义与调用def printStar(row, col): # def 函数名(参数列表): 打印 row 行 col 列的 * # 文档字符串说明函数功能 while row 0: print(* * col) row - 1 printStar(2, 3) # 调用先定义后调用 print(- * 20) printStar(1, 4)规则记住几点def开头参数放圆括号里函数体要缩进return返回结果不带表达式返回None函数定义后要先调用才会执行。形参 vs 实参定义时的是形参占位符函数提供者用调用时传的是实参真正的数据调用者给。函数执行完栈空间释放局部变量也跟着消失。三、传参Python 传的是 引用Python 里变量和数据分开存变量里存的是数据的内存地址这个地址叫引用。用id()能看内存地址。核心区别是可变 vs 不可变不可变数字、字符串、元组传的是 值函数里改不影响外面可变列表、字典、集合传的是 引用函数里改会真的改掉外面的数据。def changeList(myList): myList[1] 50 # 修改了列表 mlist [1, 2, 3] changeList(mlist) print(mlist) # [1, 50, 3] 外面也变了再看var1 * 2vsvar1 var1 * 2的区别*在原地址上改会开辟新空间。这在写函数时很容易踩坑。四、四种参数形式1. 必须参数位置传参实参数量和顺序必须和形参一致。def func(a, b, c): print(a, b, c) func(1, 2, 3) # 1传a, 2传b, 3传c2. 关键字参数调用时指名道姓顺序可以乱。def printInfo(name, age): print(f姓名:{name}, 年龄:{age}) printInfo(namezhangsan, age18) printInfo(age18, namezhangsan) # 顺序无所谓3. 默认值参数定义时给默认值调用时可省略。def printInfo(name, age20): # age 默认 20 print(f姓名:{name}, 年龄:{age}) printInfo(zhangsan) # age 用默认值 20 printInfo(lisi, 30) # 传了就用 304. 不定长参数参数个数不确定。*args收成元组**kwargs收成字典。def printInfo(num, *vartuple): # *收成元组 print(num, vartuple) printInfo(70, 60, 50) # 70 (60, 50) def printInfo2(num, **vardict): # **收成字典 print(num, vardict) printInfo2(10, a20, b30) # 10 {a:20,b:30}⚠️ 注意*不定长参数后面的参数调用时必须用关键字传参。解包传参反过来把元组 / 字典拆开传给定长参数。def func(a, b, c): return a b c print(func(* (1, 2, 3))) # 元组解包6 print(func(**{a:1,b:2,c:3})) # 字典解包6key名要和参数名一致五、返回值return结束函数并把结果交给调用者def add(num1, num2): return num1 num2 res add(10, 20) # 用变量接收 print(res) # 30不带表达式return或没有return返回None可以一次返回多个值会打包成元组def f(a, b, c): return a, b, c, [a, b, c] print(f(1, 2, 3)) # (1, 2, 3, [1, 2, 3])六、变量的作用域作用域决定变量在哪能访问Python 有四级查找顺序L → E → G → BLLocal局部函数内定义EEnclosing嵌套外层函数里GGlobal全局模块顶层BBuilt-in内建Python 自带如int注意if/for/while 这些代码块不引入新作用域里面定义的变量外部也能访问只有函数、类、模块才引入新作用域。global 关键字—— 在函数里改全局变量var1 100 def function_a(): global var1 # 声明要用全局的 var1 var1 200 function_a() print(var1) # 200但有个特例全局变量是可变类型列表 / 字典时不用 global 也能改改的是里面内容不是重新指向。nonlocal 关键字—— 在嵌套函数里改外层函数的变量def outer(): var1 1 def inner(): nonlocal var1 # 改外层 outer 的 var1 var1 200 inner() print(var1) # 200七、递归函数调用自己递归就是把大问题拆成小问题。两个关键点找规律 定结束条件。求阶乘5! 5×4×3×2×1# 迭代法 def get_factorial(num): res 1 for n in range(1, num 1): res * n return res print(get_factorial(5)) # 120 # 递归法 def factorial(n): return n * factorial(n - 1) if n 1 else 1 print(factorial(5)) # 120递归要小心别写成死循环—— 一定得有结束条件。八、匿名函数 lambdalambda 参数列表: 表达式一个表达式搞定适合当参数传# 直接定义 f lambda x, y: x y print(f(1, 2)) # 3 # 配合内置函数最常用 student_list [{name:zhang3,age:36},{name:li4,age:14}] print(sorted(student_list, keylambda x: x[age])) # 按年龄排序 print(list(map(lambda x: x*x, [0,1,3,7,9]))) # 逐个处理 [0,1,9,49,81] print(list(filter(lambda x: x 0, [-0,-1,-3,7,9]))) # 过滤 [0,7,9] from functools import reduce print(reduce(lambda x, y: x*y, [1,2,3,4,5])) # 累积 120老哥收尾函数这块信息量大但全是基本功。一句话总结定义用 def、调用写函数名 ()、传参分清可变不可变、*/**管不定长、global/nonlocal 管作用域、递归找规律定出口、lambda 一行定小函数。下一篇咱们学文件操作—— 让程序能把数据写到硬盘、从硬盘读出来。有问题随时回来找老哥。
企业数字化 ERP 产品动态
相关推荐
AdMergeX 获信通院多项认可,市场部负责人受聘铸基计划技术专家 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 19:27:23
客户复购预测真的值得做吗?从业务目标、方案取舍到上线验收 上一篇《从一家小店看懂数仓与机器学习:先理业务,再串技术》,沿着小林的店,把交易、客户状态、数仓与预测连接了起来。
接下来还有一组更难的问题:这件事值得投入吗?普通规则是否已经够用?模型… · 2026/11/3 19:27:23
前端图片上传0KB问题解析与解决方案 1. 前端图片上传0KB问题深度解析最近在VueElementUI项目中处理图片上传时,遇到了一个典型问题:部分用户上传的图片在服务器端显示为0KB的破损文件。这个问题看似简单,实则涉及前端文件处理机制、浏览器API使用规范、前后端交互协议等多个技术… · 2026/11/3 20:02:38
用ping二分法快速定位MTU故障:原理、参数与上线自检清单 1. MTU配错到底会怎样:从三个真实症状说起MTU 这个词听起来很基础,但真正在现网里遇到它的时候,往往已经是半夜被告警叫醒的状态了。我先说三个我自己碰到过的场景,你对号入座一下,看看是不是眼熟。第一个场景… · 2026/11/3 20:02:38
Ansible Playbook进阶实战:生产级自动化技巧 1. Ansible Playbook进阶实战:从基础到生产级自动化(开头部分)
第一次接触Ansible Playbook时,我被它简洁的YAML语法和声明式编程模式深深吸引。但真正在生产环境大规模使用时,才发现那些基础教程里没讲的细节才是决定… · 2026/11/3 20:02:38
SURPAC地质建模规范:数据表、ID编号与文件命名避坑指南 简介:这份文档面向地质勘探、矿产资源评价及环境监测领域的建模初学者与技术人员,系统梳理了 SURPAC 软件建模的核心知识点,帮助读者建立从数据组织到解译建模的完整认知框架。压缩包内为 1 个 docx 文件,约 17KB,内容… · 2026/11/3 20:02:38
RTDE 实时数据交换:125Hz 上限、两阶段设计与避坑指南 简介:面向UR(优遨)机器人开发者与自动化集成工程师的RTDE接口技术手册,聚焦如何通过标准TCP/IP连接将外部程序与UR控制器同步,同时不破坏控制器实时属性,适用于现场总线驱动交互、机器人I/O操作与轨迹状态绘… · 2026/11/3 20:02:38
Firefox中文语言包安装与失效排查:版本匹配与多平台配置 帮别人装浏览器这种事我干过不少回,最常被追问的一句话就是——为什么装完之后界面还是英文的?Firefox 中文语言包的安装方法看着简单,真动手的时候却总在几个地方卡住:语言包版本差一位装不上、xpi 文件拖进去没反应、装完重启还… · 2026/11/3 20:01:37
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46