函数定义、调用、闭包
1.python基础之注释2.python语言学习路线(基础)3.python源码结构4.python发展史及python应用场景5.变量6.bug及debug7.常见数据类型及其转换8.字符串格式化9.转义符10.字符串在货币、日期、精度的处理11.字符编解码12.字符编解码及其相互转换13.内置函数-help-帮助文档14.内置函数print-输出15.内置函数input16.运算符17.int的缓存策略(特别容易混)18.判断语句19.random模块20.判断语句+ random的应用-剪刀石头布游戏21.三元运算符(if else的简写)22.循环语句-while23.循环语句-while-练习题24.循环语句for循环25.循环语句 + else26.字符串类str27.正则在字符串中的简单应用28.列表(List)29.列表list的sort方法的坑30.列表综合应用-8个教室随机分配到3个教室31.元组32.自动组包 & 自动解包33.字典34.集合35.公共操作36.公共操作-推导式(集合、列表、字典)
37.函数定义、调用、闭包
38.拆包和交换变量值39.函数的变量作用域、返回值、参数40.函数递归41.匿名函数(lambda表达式)0142.内置函数abs43.内置函数round44.内置函数abs0245.高阶函数46.内置高阶函数map47.内置高阶函数reduce48.内置函数reduce49.学生管理系统-函数&循环&运算符综合练习50.文件操作之语法51.文件操作2-最佳实践52.文件操作之seek53.文件及文件夹操作54.面向对象基本概念55.面向对象之类、对象的定义56.添加和获取对象属性57.面向对象之魔法方法58.魔法函数 __repr__() 和 __str__()的区别59.魔法方法__len__60.魔法方法之__getitem__(self, key)、__setitem__(self, key, value) 和 __delitem__(self, key) 61.魔法方法之__iter__(self) && __next__(self)62.TypeError: iter() returned non-iterator of type 'MyIterable'63.魔法方法之__contains__()64.魔法方法之__call__65.魔法方法之__getattr__(), __setattr__(), 和 __delattr__66.__eq__(), __lt__(), 和 __gt__() 67.案例:烤地瓜68.案例:给房子置办家具69.继承70.继承之子类复用父类的属性、方法71.继承的分类72.MRO73.继承之子类重写父类同名属性和方法74.⼦类调⽤⽗类的同名⽅法和属性75.私有属性&&方法的定义&访问限制76.setter&getter方法访问私有属性77.__mro__属性78.python 面向对象3大特征详解79. 类属性和实例属性80.类属性和实例属性最佳实践81.类方法82.静态方法83.异常基础84.多组异常处理基础85.多组异常处理86.使用Python内置的错误信息87.捕获所有异常88.手动抛异常(raise)89.try-except-else-finally90.断言assert在异常中应用91.自定义异常类92.模块93.常见的5种模块导入94.模块的定位顺序95.__all__变量限制、明确导入范围96.包97.时间模块datetime98.多任务编程之并发、并行概念99.进程实现多任务(进程概念、单进程、多进程执行多任务)函数的作用
函数就是将一段具有独立功能的代码块整合到一个整体并命名(函数名),在需要的位置通过函数名调用,这样就可以执行这个代码块。
函数也是代码重用的一种方式。
函数的语法及调用步骤
函数是直接在模块/py文件中定义的,与类方法、实例方法有区别。
1 ''' 2 一、 函数的语法: 3 def function_name(parameter1, parameter2, ...): 4 """函数文档字符串""" 5 # 函数体代码块 6 # ... 7 return value # 可选的返回值 8 9 1. 使用def关键字定义函数,并给函数指定一个名称。 10 2. 在函数名称后面跟着一对小括号,括号内可以包含零个或多个参数(也称为形式参数)。 11 3. 冒号:表示函数定义的结束,接下来是函数体的代码块,缩进表示属于函数的代码部分。 12 4. 函数体中的代码可以执行任意操作,包括条件语句、循环、变量赋值等。 13 5. 可以使用return语句来指定函数的返回值。如果没有return语句,函数将默认返回None 14 15 二、 函数的使用步骤: 16 1. 定义函数 17 2. 调用函数 18 ''' 19 20 # 1. 定义函数:有返回值 21 def add_numbers(x, y=0): 22 """返回两个数的和""" 23 return x + y 24 # 2. 调用函数 25 result = add_numbers(3, 4) # 调用函数,传递两个参数,输出: 7 26 print(result) 27 28 # 定义函数:无返回值 29 def greet(name): 30 """打印问候语""" 31 print(f"Hello, {name}!") 32 33 greet("Alice") # 调用函数,输出: Hello, Alice!
函数的嵌套及闭包
闭包的定义:闭包是一个函数对象,它包含了在定义它的环境中捕获的自由变量(外部函数中定义的变量)。
在Python中,当一个内部函数引用了外部函数的变量,并且这个内部函数在外部函数之外被调用时,就创建了一个闭包。其特点:
- 内部函数引用了外部函数的变量。
- 外部函数返回内部函数。
- 内部函数在外部函数之外被调用。
''' 函数的嵌套: 最佳实践: 1. 保持函数简洁和可读性: 函数应该尽量保持简短和专注,执行单一的任务。避免在一个函数中嵌套过多的函数,以免降低代码的可读性。 2. 提高代码的模块化性: 使用函数嵌套将代码分解为更小的、可重用的部分,提高代码的模块化性。这样可以使代码更易于理解、测试和维护。 3. 合理使用闭包: 当需要在内部函数中访问外部函数的变量并保持对其的引用时,可以使用闭包。但要注意闭包可能导致变量的生命周期延长,可能会占用更多的内存空间。因此,仅在需要时才使用闭包,并确保不会出现意外的副作用。 4. 使用函数参数传递数据: 如果内部函数需要外部函数的数据,应该通过函数参数进行传递,而不是直接访问外部函数的变量。这样可以更清晰地表示数据流动和依赖关系,并提高函数的可测试性和可维护性。 def outer_function(): """外部函数""" print("执行外部函数") def inner_function(): """内部函数""" print("执行内部函数") inner_function() # 在外部函数中调用内部函数 outer_function() # 调用外部函数,输出: 执行外部函数\n执行内部函数 闭包: def outer_function(x): """外部函数""" def inner_function(y): """内部函数""" return x + y # 访问外部函数的变量 return inner_function # 返回内部函数作为闭包 closure = outer_function(5) # 调用外部函数,返回闭包 result = closure(3) # 调用闭包,输出: 8 ''' # 需要注意的是,内部函数只能在外部函数内部访问,无法从外部函数之外直接调用。 # 这种封装可以防止内部函数与外部代码发生命名冲突,并隐藏内部实现的细节。 def outer_function(): """外部函数""" print("执行外部函数") def inner_function(): """内部函数""" print("执行内部函数") inner_function() # 在外部函数中调用内部函数 outer_function() # 调用外部函数,输出: 执行外部函数\n执行内部函数 # 2, 闭包 ''' outer_function接受一个参数x并返回一个闭包。 闭包inner_function访问了外部函数的变量x,并使用它来计算传入的参数y与x的和。我们可以将外部函数调用后返回的闭包赋值给一个变量closure,然后通过调用closure来执行闭包。 ''' def outer_function(x): """外部函数""" def inner_function(y): """内部函数""" return x + y # 访问外部函数的变量,闭包特点1 return inner_function # 返回内部函数作为闭包,闭包特点2 closure = outer_function(5) # 调用外部函数,返回闭包,x=5 result = closure(3) # 调用闭包,y=3, x+y = 5 + 3输出: 8 闭包特点3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!