Python 基础 一文通关函数:从基础定义、文档规范到高级参数与 Lambda

Python 基础 一文通关函数:从基础定义、文档规范到高级参数与 Lambda
前言在 Python 编程中函数是代码复用的基石。很多初学者虽然会写def但往往忽略了文档规范、作用域陷阱以及高阶参数的使用。本文将结合 Python 函数基础与进阶特性带你系统性地掌握函数编程的核心知识。第一部分夯实基础——函数的定义与规范1. 什么是函数函数是组织好的、可重复使用的、用来实现特定功能的代码段。作用提高代码的复用性减少重复代码提高开发效率。2. 基础语法与调用定义函数的标准格式如下def function_name(parameters): 函数说明文档 # 函数体 return value定义使用def关键字后跟函数名和圆括号。调用直接使用函数名(参数)即可执行。接收返回值result function_name(args)。3. 良好的编程习惯函数说明文档给函数添加说明文档Docstring能辅助理解函数的作用特别是在团队协作中非常重要。格式示例def add_num(x, y): 求和函数 :param x: 第一个数字 :param y: 第二个数字 :return: 两个数字的和 return x y 查看文档 print(add_num.doc)4. 变量的作用域易错点变量并不是在哪里都能用的这就涉及到了作用域。局部作用域函数内部定义的变量只能在函数内部使用。全局作用域函数外部定义的变量整个文件可用。global 关键字如果你想在函数内部修改全局变量必须使用global声明。num 100 # 全局变量 def test(): global num # 声明我要用全局的那个 num num 200 # 修改全局变量 print(num) test() print(num) # 输出 200因为被函数修改了5. 返回值与 None 类型return不仅结束函数还将结果返回给调用者。def add(a, b): 返回两个数的和 return a b def greet(name): 打印问候语无显式返回值 print(fHello, {name}!) # 没有 return 语句默认返回 None 调用示例 result1 add(3, 5) # result1 接收返回值 8 print(result1) # 输出: 8 result2 greet(Alice) # 打印: Hello, Alice! print(result2) # 输出: None函数没有 returnNone表示“空”或“无意义”。如果函数没有return默认返回None。None在if判断中相当于False。常用于变量初始化result None。第二部分函数进阶掌握了基础后我们需要让函数变得更灵活、更强大。6. 函数的嵌套使用在一个函数内部调用另一个函数。这是封装复杂逻辑的基础。def func_B(): print(我是 B 函数) def func_A(): print(我是 A 函数) func_B() # A 里面调用了 B func_A()7. 四种参数传递方式核心重点7.1 位置参数最基础的传参方式。顺序必须一致个数必须匹配。def user_info(name, age): print(f姓名: {name}, 年龄: {age}) user_info(Tom, 20) # 正确7.2 关键字参数通过keyvalue形式传递。作用消除参数顺序限制提高代码可读性。注意如果混用位置参数必须在关键字参数前面。user_info(age20, nameTom) # 正确顺序无所谓混用示例正面示例正确混用def user_info(name, age, city): print(f姓名: {name}, 年龄: {age}, 城市: {city}) 正确位置参数在前关键字参数在后 user_info(Tom, city北京, age20) # 输出姓名: Tom, 年龄: 20, 城市: 北京反面示例错误混用# 错误关键字参数在位置参数前面 user_info(nameTom, 北京, age20) # 会报错SyntaxError: positional argument follows keyword argument记住这个简单规则先位置后关键字。一旦开始使用关键字参数后面的所有参数都必须使用关键字形式。7.3 缺省参数默认参数定义函数时给参数一个默认值。调用时如果不传该参数就使用默认值。规则所有位置参数必须出现在缺省参数前面。def print_info(name, gender男): print(f{name} 的性别是 {gender}) print_info(小明) # 输出小明 的性别是 男 print_info(小红, 女) # 输出小红 的性别是 女7.4 不定长参数*args 与 **kwargs当你不确定调用者会传入多少个参数时使用不定长参数。*args接收所有位置参数打包成一个元组 (tuple)。**kwargs接收所有关键字参数打包成一个字典 (dict)。*args 单独使用示例*args用于接收任意数量的位置参数def sum_all(*args): 计算所有传入数字的和 total 0 for num in args: total num return total 调用示例 print(sum_all(1, 2, 3)) # 输出6 print(sum_all(10, 20, 30, 40)) # 输出100 print(sum_all(5)) # 输出5 print(sum_all()) # 输出0没有参数时args 是空元组**kwargs 单独使用示例**kwargs用于接收任意数量的关键字参数def print_user_info(**kwargs): 打印用户信息 for key, value in kwargs.items(): print(f{key}: {value}) 调用示例 print_user_info(name张三, age25, city北京) 输出 name: 张三 age: 25 city: 北京 print_user_info(title工程师, department研发部) 输出 title: 工程师 department: 研发部 print_user_info() # 没有参数时kwargs 是空字典*args 和 **kwargs 混合使用示例两者可以同时使用但必须遵循顺序*args在前**kwargs在后def demo(*args, **kwargs): print(f位置参数打包: {args}) # 输出元组 print(f关键字参数打包: {kwargs}) # 输出字典 demo(1, 2, 3, nameJack, age18) 输出 位置参数打包: (1, 2, 3) 关键字参数打包: {name: Jack, age: 18} demo(a, b, x100, y200) 输出 位置参数打包: (a, b) 关键字参数打包: {x: 100, y: 200}重要规则*args必须放在所有普通位置参数之后**kwargs必须放在所有参数包括*args之后正确的参数顺序普通参数 →*args→**kwargs8. 匿名函数 LambdaLambda 是一种极简的函数定义方式适用于逻辑简单、只需使用一次的场景。语法lambda 参数: 表达式特点只能包含一个表达式不能包含复杂的语句块表达式的计算结果就是返回值。# 普通函数 def add(a, b): return a b Lambda 写法 sum_func lambda a, b: a b print(sum_func(10, 20)) # 输出 30应用场景常作为参数传递给其他高阶函数如sort,map,filter。students [(Alice, 88), (Bob, 95), (Charlie, 70)] # 按成绩排序取元组第二个元素 students.sort(keylambda x: x[1]) print(students)总结从基础的def定义、作用域控制到进阶的*args/**kwargs灵活传参再到优雅的lambda表达式掌握这些内容你的 Python 代码将更加简洁、专业且易于维护。建议动手敲一遍代码体会不同参数传递方式的区别