Python学习第4日

1.函数

函数是组织好的,可以重复使用的,用来实现特定功能的代码片段

例如:input()和print()函数

1.1 函数定义

注意:函数定义时的参数列表和返回值语句是可有可无的;函数必须先定义后调用(函数定义时,内部函数体并未执行,在调用时才会执行)

1.2 函数的参数与返回值

注意:

  • 函数定义时如果有多个参数,过个参数间用逗号 (,)分隔;
  • return 语句只有返回功能,而没有输出打印的功能,如果要输出,需要配合print()语句来实现
  • 在调用函数时,传入实参时的顺序要和定义时的形参的数据保持一致
  • round(数据,保留几位小数)

1.3 函数的说明文档

函数的说明文档是写在函数开头,用三个引号包裹的字符串,用于解释函数的功能,参数,返回值等信息,方便调用者清楚函数的具体作用及细节

使用 Ctrl + 鼠标点击函数 可以跳转到该函数的定义位置

1.4 函数的嵌套调用

函数的嵌套调用指的是在一个函数中,又调用了另外一个函数

函数调用遵循栈结构,最后被调用的函数最先返回 LIFO(后进先出)

2.函数的进阶

2.1 函数变量的作用域

变量的作用域指的是变量的作用范围(标识这个变量在哪里可以使用,在哪不可以使用)

变量的分类:

  • 全局变量:函数之外定义的变量,称之为全局变量,在整个文件中(包括函数内)都可以使用(通常定义在函数的顶部)
  • 局部变量:函数内部定义的变量,称之为局部变量,只能在该函数内部使用,外部无法访问(函数执行完毕后,会自动销毁其内部局部变量)

global 关键字:

global 关键字用于明确的告诉Python解释器,在函数中要使用全局变量,使得可以在函数内部修改全局变量的值

在基于 global 关键字声明全局变量时,要先声明,再使用

2.2 函数参数详解

2.2.1 函数传参方式

传参方式是指:在调用函数时,传递实参的方式

1.位置参数 :调用函数时根据函数定义时的位置来传递参数

要求:调用函数时参数顺序与定义函数时参数顺序完全一致

2.关键字参数: 调用函数时以函数定义时形参名称作为关键字,以 "键 = 值" 的形式来传递参数(不要求顺序)

要求:如果位置参数与关键字参数混用,关键字参数必须在位置参数之后(关键字参数之间没有顺序要求)

3. 位置参数 VS 关键字参数

2.2.2 默认参数

默认参数也称为缺省参数,用于在定义函数时,为参数提供默认值,调用函数时,可以不传递有默认值的参数

注意:

  • 默认参数必须放在没有默认值的参数列表的后面,一个函数在定义时是可以设置多个默认参数的
  • 函数调用时,如果为默认参数传递了值,则会修改默认的参数值;如果没有传递该参数,则直接使用默认值

2.2.3 不定长参数

不定长参数也叫可变参数,用于函数定义及调用时参数个数不确定(0个或多个)的场景

类型:

  • 位置传递
  • 关键字传递

1. 不定长参数------位置传递

注意:

  • 传递的所有匹配的位置参数都会被 args 变量收集,这些参数会合并封装为一个元组, args 是元组类型(注意并不会封装关键字参数)
  • args 只是约定俗成的变量名,并不是关键字,这里可以使用任何合法的变量名(如 *data)

2. 不定长参数------关键字传递

注意:

  • 参数是以 "键 = 值" 形式传递的关键字参数, 这些 "键 = 值" 参数都会被 kwargs 接收,并封装为一个字典类型
  • kwargs 只是约定俗成的变量名,并不是关键字,这里可以使用任何合法的变量名(如 **options)

3. 小结

当不定长位置参数和不定长关键字参数同时存在的情况下,要先定义不定长位置参数,再定义不定长关键字参数

2.2.4 参数的类型

  • 普通参数:数字,布尔,字符串,列表,元组,集合,字典等
  • 特殊参数:函数

2.3 匿名函数

命名函数:定义的函数都有名字

匿名函数:指的是没有名称的函数 ,需要通过 lambda 表达式来声明函数,可以简化简单函数的编写**(单行表达式)**

注意:

  • 由于 lambda 表达式是一个单行表达式,因此只能用于一些简单函数的定义
  • 由于 lambda 表达式定义的匿名函数没有名字,因此需要在定义时将函数赋值给一个变量,这个变量本质就是一个简易函数
  • 匿名函数中可以返回结果,也可以不返回结果。返回结果时,不需要写 return ,表达式的运行结果就是要返回的结果

匿名函数的使用场景: 函数逻辑比较简单(单行表达式)且只在一个地方使用时,可以考虑使用匿名函数,简化书写(通常作为高阶函数的参数使用),如下所示:

小结:

相关推荐
深蓝海拓1 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(十五)后续完善和改进:PLC端数据解析的防粘包、残包、废包、拆包
笔记·学习·plc
小黄蚁2 小时前
LVGL学习笔记(六)
笔记·学习
zyf1044162 小时前
暑期实践日志 Day33:整体复盘核查视频,完善剪辑成果
学习·计算机网络·剪辑·暑期实践·课题任务
01_ice2 小时前
前端学习css
前端·css·学习
for_ever_love__3 小时前
PySpark学习: 数据输出
开发语言·python·学习·spark
liulilittle4 小时前
llmx 学习手册 06 —— CPU 指令集优化(AVX-512 三层演进)
c++·学习·算法·ai·llm
hsjiasb5 小时前
FreeRTOS学习(三十八)——性能优化
学习·学习笔记·freertos
山甫aa5 小时前
JavaWeb后端开发学习手册
java·开发语言·数据库·学习·mysql·springboot·web
网络设计ensp5 小时前
商超网络设计
网络·学习·安全·智能路由器·ensp·华为网络设计
边境悍匪6 小时前
蜗牛学苑 Java 智能体学习 Day26|HTML(续)、断点调试思维导图复盘
学习