文章目录
第一章、函数是什么?为什么要用它
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。用
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一句话总结:用完就扔的“一次性筷子”,省得你专门洗一副碗筷。适合临时小逻辑,别往复杂了整。
总结
函数学完之后,你可以去干点真正“程序员”的事了。
比如你写一个自动算外卖满减的函数、一个判断今天要不要带伞的函数、一个给群友发每日早安消息的函数——都是函数在手,说走就走。
学完函数我们在编写代码时,不仅不用一直编写大量重复的代码,也给我们的代码简易和丝滑锦上添花🧁