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

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标准库介绍

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

 

 

 

 

 

 

 

http://www.xdnf.cn/news/429.html

相关文章:

  • java ai 图像处理
  • php实现zip压缩
  • Linux:基础IO---动静态库
  • python 库 下载 ,整合在一个小程序 UIUIUI
  • Grouped Query Attention (GQA) PyTorch实现
  • 单片机如何通过串口与上位机进行数据交换
  • RAG vs. CAG vs. Fine-Tuning:如何为你的大语言模型选择最合适的“脑力升级”?
  • 使用EXCEL绘制平滑曲线
  • 从代码学习深度学习 - 优化算法 PyTorch 版
  • Vue 3 中将 ref 创建的响应式对象数据转换为普通(非响应式)的数据
  • JAVA IO、BIO、NIO、AIO及零拷贝
  • Warcraft Logs [Classic] [WCL] Usage Wizard <HTOC>
  • FPGA系列之DDS信号发生器设计(DE2-115开发板)
  • 睡前小故事数据集分享
  • 腾讯wxg企业微信 后端开发一面
  • [Swift]Xcode模拟器无法请求http接口问题
  • 阿里云Clickhouse 冷热数据分层存储 实战记录
  • 【图片识别改名工具】图片文件区域OCR识别并自动重命名,批量识别指定区域根据指定识别文字批量改名,基于WPF和阿里云的技术方式实现
  • 二进制裁剪命令mips-linux-gnu-strip 命令的使用
  • NoSQl注入学习
  • 【Flutter动画深度解析】性能与美学的完美平衡之道
  • 多人五子棋联机对战平台 测试报告
  • 【绘制图像轮廓】图像处理(OpenCV) -part7
  • leetcode哈希表(六)-三数相加
  • P11299 [NOISG 2021 Finals] Fraud 题解
  • PHP异常处理__Exception类
  • 实验4基于神经网络的模式识别实验
  • opencv 图像的旋转
  • linux下C++性能调优常用的工具
  • 真实波幅策略思路