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

Python 函数:告别复制粘贴,让你的代码学会“叠buff”

文章目录

第一章、函数是什么?为什么要用它

1.1 函数的本质

1.2 怎么定义一个函数?

第二章:形参与实参 —— 函数的“占位符”和“填空值”

2.1 形参和实参是什么?

2.2 传参就像填空

2.3 多个参数:一个不够就多几个

2.4 参数传递的顺序

第三章:函数的返回值 —— 把结果“吐”出来

3.1 return —— 函数干完活了,把结果给你

3.2 没有 return 会怎样?

3.3 返回多个值(返回元组)

第四章:函数的几种常见用法

4.1 无参无返回值 —— 纯执行

4.2 有参无返回值 —— 接收输入,只干活

4.3 无参有返回值 —— 不需要外部输入,直接出结果

4.4 有参有返回值 —— 最常见的形式

第五章、匿名函数 lambda —— 写完就扔的“一次性工具”

总结



前言

如果你写过几行 Python 代码,大概率经历过这样的场景:

写着写着,发现同样的操作需要重复做三次。你的第一反应:Ctrl+C,Ctrl+V

于是代码变成了这样:

python

print("欢迎来到王者荣耀") print("欢迎来到王者荣耀") print("欢迎来到王者荣耀")

三遍还好,要是三十遍呢?三百遍呢?手按 Ctrl+V 按到抽筋?

这时候你就会想:要是能把这段代码“打包”起来,想用的时候喊一声就执行,该多好。

恭喜你,你想的就是函数

函数就是给你的一段代码起个名字,以后想用的时候,只需要喊这个名字,代码就自动跑一遍。而且每次跑还能换不同的“原料”进去,做出不同的结果——就像煎饼果子摊,流程是固定的(摊饼、打蛋、撒料),但你可以选加火腿还是加鸡柳。

今天这一篇,我们把函数的老底全掀了:什么是函数、怎么定义、形参和实参是啥、怎么用。看完之后,你的代码会变得像乐高积木一样,想怎么拼就怎么拼。

开整!🧩

第一章、函数是什么?为什么要用它

1.1 函数的本质

函数就是把一段代码打包,起个名字,随时调用

python

# 定义一个函数 —— 像写一份“菜谱” def say_hello(): print("你好呀!") print("欢迎来到 Python 世界!") # 调用函数 —— 像照着菜谱做菜 say_hello() say_hello()

输出:

text

你好呀! 欢迎来到 Python 世界! 你好呀! 欢迎来到 Python 世界!

📌 用函数的好处:

  • 复用:写一次,用无数次

  • 清晰:把复杂逻辑拆成小块,每个函数只干一件事

  • 好改:需求变了,只改函数里面,不用到处找

1.2 怎么定义一个函数?

语法长这样:

python

def 函数名(): 缩进的代码块
  • def—— 关键词,表示“我要定义函数了”

  • 函数名 —— 你自己起,跟变量名规则一样(字母数字下划线,不能数字开头)

  • ()—— 必须写,里面放“参数”(后面讲)

  • :—— 英文冒号,别漏了

  • 缩进 —— 函数体统一缩进(4个空格或一个Tab)

举个例子:

python

# 写一个“点到为止”的函数 def show_menu(): print("=" * 20) print(" 1. 开始游戏") print(" 2. 继续游戏") print(" 3. 设置") print(" 4. 退出") print("=" * 20) # 调用它 show_menu()

第二章:形参与实参 —— 函数的“占位符”和“填空值”

2.1 形参和实参是什么?

有时候,函数需要接收外部传进来的数据才能干活。比如“做一道菜”,你得告诉它“加什么食材”。

这时候就需要参数登场了。

python

def cook(dish_name): # dish_name 就是形参(形式参数) print(f"正在烹饪:{dish_name}") print("起锅烧油...") print("装盘上桌!")

形参(形式参数):定义函数时括号里写的变量名,相当于“占位符”,告诉调用者“我这里需要你传一个东西进来”。

python

cook("红烧肉") # "红烧肉" 就是实参(实际参数) cook("清蒸鱼") # 又传了一个不同的值

实参(实际参数):调用函数时真正传进去的值,就是“填空”的具体内容。

📌一句话区别

  • 形参:定义时写的占位名,比如菜谱上写的“主料”

  • 实参:调用时传的具体值,比如你拿出来的五花肉

2.2 传参就像填空

python

def greet(name): # name 是形参——占个位置 print(f"你好,{name}!") print(f"欢迎光临本店,{name}先生/女士") # 调用:传不同的实参进去 greet("王小明") # 实参 = "王小明" greet("李小红") # 实参 = "李小红"

输出:

text

你好,王小明! 欢迎光临本店,王小明先生/女士 你好,李小红! 欢迎光临本店,李小红先生/女士

2.3 多个参数:一个不够就多几个

函数可以接受多个参数,用逗号隔开:

python

def order(dish, quantity, spicy=False): # 三个形参 print(f"您点了 {quantity} 份 {dish}") if spicy: print("加辣!") else: print("不加辣。") print("您的订单已提交,请稍候...") # 调用 order("宫保鸡丁", 2, True) order("番茄炒蛋", 1)

💡 默认参数:spicy=False表示如果你不传,默认就是False(不加辣)。这叫默认参数

2.4 参数传递的顺序

按位置传参(最常用):

python

def introduce(name, age, city): print(f"我叫{name},今年{age}岁,来自{city}") introduce("王小明", 18, "北京") # 按顺序:name→"王小明" age→18 city→"北京"

关键字传参(不按顺序,指名道姓):

python

introduce(city="上海", age=20, name="小红") # 打乱顺序也能认出来

第三章:函数的返回值 —— 把结果“吐”出来

3.1return—— 函数干完活了,把结果给你

有些函数不需要返回值,比如print()只是显示东西,不给结果。但大部分函数干完活要把结果交到你手上,这时候就要用return

python

def add(a, b): result = a + b return result # 把计算结果“吐”出来 # 调用时用变量接住返回值 sum = add(10, 20) print(sum) # 30

📌return的两种形态:

  • return 值—— 返回具体结果

  • return或直接不写 —— 返回None

3.2 没有return会怎样?

python

def just_print(a, b): print(a + b) result = just_print(10, 20) # 会打印 30 print(result) # None(因为函数没有 return)

⚠️如果你要用函数的结果做进一步计算,务必return。用print只是显示给人看,程序拿不到数据。

3.3 返回多个值(返回元组)

python

def get_user_info(): name = "王小明" age = 18 city = "北京" return name, age, city # 实际上返回了一个元组 info = get_user_info() print(info) # ('王小明', 18, '北京') print(info[0]) # 王小明 # 也可以直接拆开接 name, age, city = get_user_info() print(name, age, city)

第四章:函数的几种常见用法

4.1 无参无返回值 —— 纯执行

python

def show_banner(): print("=" * 30) print(" ☕ 欢迎光临 Python 咖啡馆") print("=" * 30) show_banner()

适合显示菜单、打印分割线、执行固定流程。

4.2 有参无返回值 —— 接收输入,只干活

python

def charge(coins): print(f"已投币 {coins} 枚,请选择饮品") charge(5)

4.3 无参有返回值 —— 不需要外部输入,直接出结果

python

import time def get_timestamp(): return int(time.time()) now = get_timestamp() print(now)

4.4 有参有返回值 —— 最常见的形式

python

def calc_discount(price, discount=0.8): return price * discount final_price = calc_discount(100) # 默认 8 折 → 80.0 final_price2 = calc_discount(100, 0.6) # 6 折 → 60.0

🎯 知识点速查表

概念说明示例
函数定义def定义代码块def cook():
形参定义时的占位变量def cook(dish):里的dish
实参调用时传入的具体值cook("红烧肉")里的"红烧肉"
默认参数不传就用默认值def cook(dish, spicy=False)
返回值函数吐出的结果return result
无返回值不写return默认返回None

第五章、匿名函数lambda—— 写完就扔的“一次性工具”

有时候你只需要一个超级简单的函数,就用一次,连名字都懒得起。这时候lambda就派上用场了。

lambda长啥样?

python

# 普通函数 def add(a, b): return a + b # lambda 写法(一行搞定) lambda a, b: a + b

📌lambda 参数: 返回值—— 左边是参数,右边是返回的结果,不需要写return,它自动返回。

怎么用?通常赋值给一个变量:

python

# 给 lambda 起个名字(但不推荐这么用,那还不如 def) add = lambda a, b: a + b print(add(10, 20)) # 30

💡lambda的真正用法不是起名字,而是作为参数传给其他函数,比如排序、过滤的时候临时写一个规则。

经典场景:搭配sorted()排序

python

students = [ {"name": "王小明", "score": 85}, {"name": "小红", "score": 92}, {"name": "小刚", "score": 78} ] # 按分数排序(升序) sorted_by_score = sorted(students, key=lambda x: x["score"]) print(sorted_by_score) # [{'name': '小刚', 'score': 78}, {'name': '王小明', 'score': 85}, {'name': '小红', 'score': 92}]

📌key=lambda x: x["score"]的意思是:从每个元素里取出score作为排序依据。这个函数只用一次,不需要专门def一个,直接用lambda搞定。

另一个经典场景:map()批量处理

python

nums = [1, 2, 3, 4, 5] # 每个数字平方 squared = list(map(lambda x: x ** 2, nums)) print(squared) # [1, 4, 9, 16, 25]

lambda的限制:只能写一行表达式

python

# ✅ 可以:一行搞定 lambda a, b: a + b # ❌ 不可以:不能写多行,不能写赋值语句 lambda a, b: result = a + b return result # 报错!

⚠️lambda适合非常简单的逻辑,但凡要写多行、要判断、要循环,老老实实用def

lambda一句话总结:用完就扔的“一次性筷子”,省得你专门洗一副碗筷。适合临时小逻辑,别往复杂了整。


总结

函数学完之后,你可以去干点真正“程序员”的事了。

比如你写一个自动算外卖满减的函数、一个判断今天要不要带伞的函数、一个给群友发每日早安消息的函数——都是函数在手,说走就走。

学完函数我们在编写代码时,不仅不用一直编写大量重复的代码,也给我们的代码简易和丝滑锦上添花🧁

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

相关文章:

  • SolidWorks自学避坑指南与高效学习路线
  • 采购前软件衔接与程序切换问题判断参考
  • 移动端图标重构:SVG方案与性能优化实践
  • SteamVR Unity激光指针与移动系统开发指南
  • C#操作摇杆实战指南:从Win32 API到数据可视化
  • AI 写短剧总是不连贯?工具选择先看分集大纲能力
  • C++轻量级JSON库JsonBox:单文件集成与配置读写实战
  • C语言学习完整路线笔记:前置基础 + 全部数据类型详解
  • TMS470 ZPLL时钟抖动对CAN总线通信影响的量化分析与工程实践
  • 卡地亚香港2026年7月最新售后电话+网点地址权威攻略 - 卡地亚服务中心
  • 系统架构设计师认证:技术人职业跃迁的关键路径
  • WMI定时脚本病毒检测与清除指南
  • 经典Visual C++教材的现代学习指南:从MFC框架到Windows编程思想
  • 智绘安澜水网,数筑水利新程 —— 黎阳之光智慧水利平台提升解决方案
  • GPT-5.6 代码解释能力详测:准确性、逻辑层次和可读性分析
  • Unity Render Streaming与WebRTC集成:实现低延迟3D内容实时流化
  • Kimi K3与Claude大模型对比:核心能力、API调用与成本效益分析
  • AI API限流机制与Key管理最佳实践
  • UE4集成Quixel Bridge插件:一站式3D资产流式导入与性能优化指南
  • 新品发布|Tattu TA-BC无人机电池检测器上线,多通道充电状态尽在掌握
  • UE5延迟渲染优化:从G-Buffer演进到Material Culling实战
  • 深入解析TI Tiva以太网DMA:RX流程、中断机制与驱动实践
  • CDN技术解析:真伪辨别与核心特征
  • AI问答系统对比:Agent与RAG技术解析与应用
  • C++成员变量初始化:从C26495报错解析对象生命周期与内存安全
  • 命令行控制Chrome:Hermes工具实现本地会话接管
  • 2026年ALM工具哪个好用?8款主流产品对比与选型指南
  • Qwen3.8-Max-Preview 2.4T参数开源:大模型部署与量化技术解析
  • C++二叉树深度优先搜索(DFS)详解:从递归到迭代与实战应用
  • TI DSP性能优化实战:循环变换与SIMD指令提升嵌入式视觉处理效率