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

Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块

上一期小练习解答(第3期回顾)

✅ 练习1:创建一个列表,添加5个名字,并用循环打印
names = ["Alice", "Bob", "Charlie", "David", "Eva"]
for name in names:print(name)

✅ 练习2:定义一个学生信息字典并打印

student = {"name": "Tom", "age": 20, "score": 88}
print(f"姓名:{student['name']},年龄:{student['age']},成绩:{student['score']}")

✅ 练习3:集合运算

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print("并集:", a | b)    # {1, 2, 3, 4, 5, 6}
print("交集:", a & b)    # {3, 4}
print("差集:", a - b)    # {1, 2}

本期主题:函数的定义与使用

在 Python 中,函数用于组织可重用的代码,是程序模块化的基础。

4.1 函数的定义和调用

✅ 定义函数语法:
def 函数名(参数1, 参数2, ...):函数体return 返回值

 

def greet(name):return f"你好,{name}!"print(greet("张三"))

4.2 函数参数详解

📌 位置参数

定义:最常用的参数,按顺序传递给函数。

def add(a, b):return a + bprint(add(3, 5))  # 输出 8

📌 默认参数

定义:为某些参数提供默认值,调用函数时可以省略。

def greet(name="游客"):print("你好,", name)greet()          # 输出:你好, 游客
greet("小明")    # 输出:你好, 小明

📌 注意事项

  • 默认参数必须放在位置参数之后

  • 默认参数的值只会在定义函数时计算一次,避免使用可变对象作为默认值(如 list、dict)。

错误示例:

def append_list(val, mylist=[]):  # ❌ 不推荐mylist.append(val)return mylist

推荐写法:

def append_list(val, mylist=None):if mylist is None:mylist = []mylist.append(val)return mylist

📌 关键字参数

def student_info(name, age):print(f"{name}今年{age}岁")student_info(age=18, name="小红")

📌 可变参数:*args**kwargs

可变参数定义用于接收任意数量的位置参数,自动打包为元组。你可以理解 *args 是在函数内部把多个参数打包成一个元组。

**kwargs定义:用于接收任意数量的键值对参数,自动打包为字典。**kwargs 通常用于函数参数不确定、或者需要灵活传参时。

# args 位置可变参数
def total(*args):return sum(args)print(total(1, 2, 3, 4))  # 输出 10# kwargs 关键字可变参数
def print_info(**kwargs):for k, v in kwargs.items():print(f"{k}: {v}")print_info(name="Tom", age=18)

函数参数顺序口诀(八股文)

在定义函数时,如果你使用了所有类型的参数,它们的顺序必须是:

位置参数 → 默认参数 → *args → 命名关键字参数(*arg)→ **kwargs

示例

def all_params(a, b=2, *args, c, d=4, **kwargs):print(a, b)print("args:", args)print("c:", c)print("d:", d)print("kwargs:", kwargs)all_params(1, 3, 5, 6, c=10, d=20, e=99, f=100)

输出:

1 3
args: (5, 6)
c: 10
d: 20
kwargs: {'e': 99, 'f': 100}

参数类型使用符号作用说明
位置参数无符号正常按顺序传参
默认参数=设置默认值,放在位置参数后
可变参数*args接收任意位置参数,打包为元组
命名关键字参数*, param只能使用关键字方式传参
关键字参数**kwargs接收任意关键字参数,打包为字典

 

4.3 函数的返回值

函数可以返回任意类型的值,也可以返回多个值(自动打包为元组)。

def calc(a, b):return a + b, a * bs, m = calc(3, 5)
print("和:", s)
print("积:", m)

4.4 匿名函数 lambda 表达式

lambda 表达式可快速定义简单函数,一般用于函数作为参数的场合。

# 普通函数
def square(x):return x ** 2# lambda 等价写法
square = lambda x: x ** 2
print(square(4))  # 输出 16

4.5 变量作用域(Scope)

变量作用域决定了变量的可见性:

  • 局部变量:函数内部定义的变量

  • 全局变量:函数外部定义的变量

  • global 关键字:在函数中声明全局变量

x = 5  # 全局变量def change():global xx = 10  # 修改全局变量change()
print(x)  # 输出 10

本期小练习:

  1. 编写一个函数,接收一个整数,判断它是否是偶数。

  2. 编写一个函数,接收多个成绩,返回它们的平均值。

  3. lambda 表达式对一组字符串按长度排序:["apple", "kiwi", "banana", "pear"]

小结:

本期你学习了 Python 函数的定义、调用、参数、返回值、匿名函数和作用域知识。掌握函数是写出高质量、可维护代码的关键。

第5期预告:

下一期我们将讲解:

  • 模块与包的导入

  • Python标准库介绍

  • 自定义模块的创建和使用

 

 

 

 

 

 

 

相关文章:

  • 机器学习误差图绘
  • SEO长尾关键词优化实战
  • JAVAEE(网络原理—UDP报头结构)
  • 一个 CTO 的深度思考
  • Vue+Notification 自定义消息通知组件 支持数据分页 实时更新
  • pycharm中怎么解决系统cuda版本高于pytorch可以支持的版本的问题?
  • 【Linux篇】探索进程间通信:如何使用匿名管道构建高效的进程池
  • 洛谷P3373线段树详解【模板】
  • 如何优雅地为 Axios 配置失败重试与最大尝试次数
  • 掌握 MySQL:从命令行操作到数据类型与字段管理
  • Windows上安装FFmpeg的详细指南
  • 树莓派超全系列教程文档--(33)树莓派启动选项
  • Git 中修改某个特定的commit提交内容
  • JMeter介绍
  • C++按位与()、按位或(|)和按位异或(^)
  • PG数据库推进医疗AI向量搜索优化路径研究(2025年3月修订版)
  • 英语四级翻译题练习文章示例
  • Sentinel源码—5.FlowSlot借鉴Guava的限流算法一
  • (03)Vue的常用指令
  • 树莓派5-开发应用笔记
  • 商务部:一季度社零总额12.47万亿元,同比增长4.6%
  • 港澳航天员最早2026年飞天
  • 当代读书人的暗号:不是拆快递,是拆出版社样书!|世界读书日特辑
  • 《国语汇校集注》:以1900余条注解,揭示隐微,提供思考
  • 成都两宗宅地成功出让,民企四川联投溢价33%竞得郫都区宅地
  • 31年前失踪的男孩与家人在重庆一派出所团聚:人像比对后DNA鉴定成功