函数
什么是函数
简单来说就是具备某些特定功能的带有名称的代码块。比如之前我们讲过的列表的增删改查函数,排序函数等等。
函数的作用
- 代码复用。函数作为具备某些特定功能的代码块,当你的程序需要多次使用同一段业务逻辑的时候,使用函数可以减少无用代码。
- 模块化设计。函数支持将大型程序分解成小的、逻辑上独立的部分,每个部分完成特定功能。这种模块化设计使得代码更易于理解、测试和维护。
- 提高可读性。给函数命名可以直观表达其功能,使阅读代码的人能够快速理解代码的目的,而不必深入细节。
- 控制复杂度:面对复杂问题时,通过定义多个函数分别处理不同子任务,可以降低问题的解决难度,使编程逻辑更加清晰。
函数的优点
- 重用代码:减少重复,提高效率。
- 模块化:简化复杂度,易于维护。
- 清晰性:命名明确,易于理解。
- 灵活参数:适应多样输入,增强通用性。
- 封装抽象:隐藏细节,促进独立开发。
- 嵌套递归:处理复杂逻辑,实现深度计算。
- 文档测试:便于说明与验证,确保质量。
- 装饰器:无需改代码即可增强功能,提升扩展性。
函数的使用
定义一个函数
def function_name(parameters):
# 函数体
return value
- def:在Python中,使用def关键字来定义一个函数。
- function_name:定义函数的名称。通常函数的名称要与函数的功能呼应,这样使得代码可读性和可维护性提高。
- parameters:函数入参。在Python中,函数定义时使用的参数称为形式参数(形参),而调用函数时传递给函数的具体值称为实际参数(实参)。
- return:函数返回值,当函数执行完毕后,返回给函数调用方的值。定义函数的时候可以不返回值,但是Python会默认返回None。
参数的使用
- 普通使用。
在这里,我们定义了一个计算和的函数,返回计算结果。 - 位置实参按顺序使用
一般情况下,函数中的参数是默认按顺序使用的,但是实际上这样使用很容易出现错误。 - 关键字实参使用
在调用的时候,带上调用函数的参数名,那么不管顺序如何,参数都能正确的使用 - 参数默认值使用
有时候参数的值不需要每次都写,那么就可以设置一个默认值。当你遇到这种调用函数的时候,可以不传递有默认值的参数,函数会使用你定义时设置的默认值。 - 匿名函数使用
匿名函数使用有点不算入门的语法,需要认真理解一下,而且匿名函数通常很少复用,函数实现非常简单的场景。
使用方法是lambda关键字:lambda parameters :function_content
入门阶段不是很建议使用,这里写出来主要是为了大家在看到这种写法的时候不懵逼。
在函数中修改参数
在之前的函数中,我们使用参数计算值,返回新的变量或者干脆就是打印参数。在实际编程的时候,函数的作用往往没有这么简单,通常会在函数中做一些循环,运行之类的操作,那么这些操作对参数有影响吗?
从这里看,在调用set_param函数是的参数a,b的值虽然在里面重新设置过,但是没有影响到a,b之前的值。
定义了一个新的函数,在函数中移出a的元素,放到b里面。函数执行结束发现a列表元素都转移到了b列表中。
为什么?
值传递和引用传递
-
值传递:对于不可变数据类型(如整数、浮点数、字符串、元组等),参数是以值传递的方式传递的。这意味着当函数接收这些类型的参数时,函数内部对参数的修改不会影响到外部变量的值,因为函数内创建的是参数值的一个副本。
-
引用传递:对于可变数据类型(如列表、字典、集合、自定义对象等),参数是以引用传递的方式传递的。这意味着当你将这些类型的对象作为参数传递给函数时,函数内部实际上接收到的是对象在内存中的地址(引用)。因此,如果在函数内部修改了这个对象(如添加、删除、修改元素等),这些改动会影响到原始数据。
在定义函数及使用函数的时候,一定要特别注意这两个传递,防止函数的执行结果出乎你的意料。
函数的高级特性
闭包:函数可以记住并访问其外部作用域的变量
装饰器:允许用户在不修改函数内容的情况下增加函数功能
稍微了解一下就行,咱只是入门现在。
库
什么是库
库是一组相关的模块的集合,用于提供额外的功能。
什么是模块
包含Python代码的文件,可以是函数、类和变量等
库的作用
-
复用代码:库是一系列预先编写、测试过的代码模块的集合,提供了通用功能的实现。通过使用库,开发者可以避免重复造轮子,直接调用现成的函数或类来完成特定任务,从而提高开发效率。
-
简化复杂任务:许多库针对特定领域或复杂功能(如图形渲染、机器学习、网络请求、数据库操作等)提供了高级抽象,使得开发者能够以更简洁的代码完成复杂的任务,而无需深入了解底层实现细节。
-
标准化开发:广泛接受的库往往遵循一定的设计模式和最佳实践,使用这些库可以帮助团队保持代码的一致性和可读性,便于维护和协作。
-
提高性能和稳定性:许多库由经验丰富的开发者或团队开发,并经过大量实际应用的检验,它们通常经过优化,能提供更好的性能和稳定性。例如,专门的数学库可能比手写算法更快、更准确。
-
安全性增强:特别是在处理敏感数据或执行安全相关操作时(如加密、认证),使用经过验证的库可以减少安全漏洞的风险,因为这些库往往包含了最新的安全协议和防护措施。
-
跨平台兼容性:一些库设计用于提供跨平台的支持,使得开发者编写的代码可以在不同的操作系统或硬件环境下无缝运行,减少了平台特定代码的编写需求。
-
社区支持和文档:流行的库通常拥有活跃的社区和详细的文档,当开发者遇到问题时,可以快速找到解决方案或获得帮助,降低了学习成本和开发难度。
库的使用
库的使用在实际编程中非常常见,尤其是你实现一些基础的,已有明确规范的功能的时候,往往可以通过导入库来直接调用库中的方法,稳定性和性能都比你自己写要好(起码对于入门的我们来说,是要好)。
常见的一些库:
math:数学运算库
datetime:日期和时间处理库
numpy:科学计算库
pandas:数据分析库
matplotlib:绘图库
如何使用这些库呢?
使用import关键字加库名即可。
import library_name
如果你在IDE,也就是我们的pychram中输入以后,库名下面有红色波浪线,你鼠标光标放上去提示模块不存在,那么说明你没安装这个库,需要安装一下。
使用 pip install library_name 命令安装库,在终端执行。
如图所示。
作业
今天的函数和库比较重要,一定要动手练习!
- 编写一个函数,计算两个数的和。
- 编写一个函数,接受一个列表,返回列表中的最大值。
- 使用默认参数和可变参数,编写一个函数打印学生信息。
- 使用math库计算圆的面积。
- 使用datetime库获取当前时间,并格式化输出。
- 使用numpy库创建一个数组,并计算其平均值和标准差。