一、为什么需要函数问题同一段代码写了 10 遍改一处要改 10 处。解决把代码封装成函数需要时调用即可。函数的好处代码复用——写一次用多次模块化——分工明确易于维护抽象——隐藏实现细节只关心「做什么」二、函数的定义与调用2.1 基本语法def 函数名(参数1, 参数2, ...): 文档字符串说明函数功能 函数体 return 返回值 # 可选2.2 示例def greet(name): 向用户打招呼 print(fHello, {name}!) greet(张三) # 调用 help(greet) # 查看文档2.3 定义函数的规则函数名是标识符遵循命名规范函数名后必须有()函数体必须缩进用return返回结果没有 return 则返回None三、参数详解重点3.1 形参与实参def add(a, b): # a, b 是形参形式参数 return a b add(3, 5) # 3, 5 是实参实际参数3.2 位置参数与关键字参数def info(name, age, city): print(f{name}, {age}岁, {city}) info(张三, 20, 北京) # 位置参数 info(name李四, age22, city上海) # 关键字参数 info(王五, city广州, age25) # 混合位置在前3.3 默认参数def greet(name, greetingHello): print(f{greeting}, {name}!) greet(张三) # Hello, 张三! greet(李四, Hi) # Hi, 李四!⚠️ 默认参数不要用可变对象# 错误 def bad(lst[]): lst.append(1) return lst # 正确 def good(lstNone): if lst is None: lst [] lst.append(1) return lst3.4 不定长参数 *argsdef total(*args): print(args) # 元组 return sum(args) total(1, 2, 3, 4) # 103.5 不定长关键字参数 **kwargsdef show(**kwargs): print(kwargs) # 字典 show(name张三, age20) # {name: 张三, age: 20}3.6 参数顺序def func(a, b, c0, *args, **kwargs): pass # 顺序位置参数 → 默认参数 → *args → **kwargs3.7 解包传参def add(a, b, c): return a b c add(*[1, 2, 3]) # 序列解包 add(**{a: 1, b: 2, c: 3}) # 字典解包3.8 参数传递机制Python 是对象引用传递不可变对象int、str、tuple函数内修改不影响外部可变对象list、dict函数内修改会影响外部def modify(lst): lst.append(4) nums [1, 2, 3] modify(nums) print(nums) # [1, 2, 3, 4]四、返回值def get_min_max(nums): return min(nums), max(nums) # 返回元组 minimum, maximum get_min_max([3, 1, 4, 1, 5]) print(minimum, maximum) # 1 5 # 没有 return 返回 None def do_nothing(): pass print(do_nothing()) # None五、函数嵌套调用def square(x): return x ** 2 def sum_of_squares(a, b): return square(a) square(b) print(sum_of_squares(3, 4)) # 25六、变量作用域6.1 局部变量与全局变量x 10 # 全局变量 def func(): x 20 # 局部变量不影响全局 print(x) # 20 func() print(x) # 106.2 global 关键字count 0 def increment(): global count count 1 increment() print(count) # 16.3 nonlocal 关键字def outer(): x 10 def inner(): nonlocal x x 20 inner() print(x) # 20 outer()6.4 LEGB 规则查找变量名的顺序Local →Enclosing →Global →Built-in七、递归函数调用自身必须有终止条件。def factorial(n): if n 1: return 1 return n * factorial(n - 1) print(factorial(5)) # 120递归三要素终止条件递归出口递归公式每次递归向终止条件靠近八、匿名函数 lambda# 语法lambda 参数: 表达式 square lambda x: x ** 2 print(square(5)) # 25 # 常用于 sorted 的 key students [(张三, 85), (李四, 92), (王五, 78)] students.sort(keylambda s: s[1], reverseTrue) print(students)九、练习题基础题1.编写is_prime(n)判断素数。2.编写函数接收任意个数数字返回平均值。3.编写函数返回字符串中 (大写个数, 小写个数, 数字个数)。4.用 lambda 将[(apple,3),(ban,2)]按数量降序排列。5.编写递归函数求 12...n。进阶题6.实现二分查找递归版。7.编写装饰器timer打印函数执行耗时。参考答案点击展开参考答案import time def is_prime(n): if n 2: return False for i in range(2, int(n**0.5) 1): if n % i 0: return False return True def average(*args): return sum(args) / len(args) if args else 0 def count_chars(s): return (sum(1 for c in s if c.isupper()), sum(1 for c in s if c.islower()), sum(1 for c in s if c.isdigit())) def sum_n(n): if n 0: return 0 return n sum_n(n - 1) def timer(func): def wrapper(*args, **kwargs): start time.time() result func(*args, **kwargs) print(f{func.__name__} 耗时: {time.time()-start:.4f}s) return result return wrapper
企业数字化 ERP 产品动态
相关推荐
大模型自测指南:碳硅道统协议下可直接套用的指标清单与避坑要点 这阵子有个高频提问反复在评论区出现:现有的大模型,到底有哪些指标可以直接套用这套“碳硅道统”协议做初步自测?很多朋友以为先要把协议整体吃透才能动手,其实不需要。落到实操层面,所谓协议就是一组评估约定——你测… · 2026/9/25 13:31:02
企业AI Agent落地实战:从Demo到生产的工程化关卡与多智能体编排 1. 从"能聊天"到"能干活":企业AI Agent的拐点已经来了如果你在过去一年里跟企业里的技术团队聊过,大概率会听到两种截然不同的声音。一种是"我们已经在用大模型做知识问答了,效果还行",另一种是&qu… · 2026/9/25 13:31:02
Atlas 300V推理卡部署YOLO全指南:从模型转换到性能调优 "atlas"这个标题最近有点热,好几个群都在问,但我发现很多人的关注点跑偏了。有人以为Atlas是一块显卡,有人以为装个PyTorch就能直接跑,还有人拿atlas 300v 24g去跟RTX 4090比性价比。这些理解其实都不太准确。作为一个从… · 2026/9/25 13:30:56
Robocup仿真救援代码实战:从环境搭建到多智能体决策与调优 简介:这份Robocup仿真救援代码面向参加Robocup Rescue仿真竞赛的学生、AI与机器人方向开发者,提供一套可运行的救援仿真软件工程,用于在虚拟灾害场景中实现自主决策、搜索、导航与危险评估。压缩包共43个文件,以42个Java源码及1个… · 2026/9/25 13:57:14
Atlas 300V 24G部署YOLO实战:从ONNX转OM到推理避坑指南 把“Atlas 300V 24G是不是运算加速卡”这个问题抛到搜索引擎里,出来的多半是半懂不懂的配置单和跑分帖。我当初刚拿到这张卡时也有同样的困惑:24G显存、被动散热、PCIe插上就能用,看起来确实像一张“显卡”,但等你想当然地装上CUD… · 2026/9/25 13:57:13
Agent技能体系实战:从工具混乱到高效编排的完整指南 做Agent开发一段时间的朋友,大概率都遇到过同一个问题:功能越加越多,技能越堆越乱,Agent用起来反而越来越“笨”——该调用的工具不调用,不该调用的天天瞎调用,翻日志排查的时候人都要疯掉。我自己手头这个… · 2026/9/25 13:57:07
重磅!DeepSeek-V3.2-Exp 发布百万输出仅3元|附完整论文中文翻译与 TaoToken 配置骨架 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 13:56:36
2026腾讯云服务器一年多少钱?30台CVM配置价格与选型指南 1. 为什么“一年多少钱”这个问题,从来都不是一句话能答完的每次有人问我“腾讯云服务器一年到底多少钱”,我都不会直接甩一个数字过去。不是我不想说,而是这个问题本身就问得不够精确——就像你问“买一辆车多少钱”,销售没法回答… · 2026/9/25 13:56:29
C++模板编译期计算:从递归实例化到constexpr的现代实践 模板编译期计算这个话题,搁在C社区里基本就是模板元编程的代名词。我最早接触它是在读Loki库和Boost.MPL源码的时候,第一感觉是这玩意儿不像代码,更像在给编译器出谜题——你写一套规则,编译器在编译阶段替你跑完所有“计算”&… · 2026/9/25 13:56:23
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37