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

函数基础(超级超级重点)

函数是一个非常重要的知识点,很多测试人员可能不怎么使用,因为不用也能完成很多任务。但掌握函数后,才能去理解程序的设计,才有成为测试开发的可能

4.1. 函数的声明

在 Python 中,使用 def 关键字来定义一个函数。函数是一段可重复使用的代码块,它接受输入参数(也可以没有参数),执行特定的操作(就是你的业务功能),并可以返回一个结果(也可以不返回任何结果)。格式:

  • def 函数名(形参列表): :不明确返回值的函数,一般不需要指定,形参列表可以没有,多个参数之间使用逗号分隔
  • 函数中的代码,需要缩进,称为函数体(函数的代码块)
  • def 函数名(形参列表) -> 返回值类型1 | 返回值类型2: :指定了返回值类型,支持多个类型可以使用|分隔,指定了也没有什么特别要求,更加明确,方便别人使用理解
1 def greet():
2     """这是一个简单的函数,用于打印问候语。"""
3     print("Hello, World!")

在上述示例中,def greet(): 定义了一个名为 greet 的函数,函数体内部的 print("Hello, World!") 语句就是该函数要执行的操作。函数的文档注释(使用三引号 """ """用于描述函数的功能等信息,这有助于提高代码的可读性和可维护性。

4.2. 函数的调用

定义好函数后,需要通过调用函数来执行函数体内部的代码。只有通过函数被调用后,其中的代码才会执行

1 # 调用greet函数
2 greet()

当执行 greet() 这一行代码时,就会执行 greet 函数内部的 print("Hello, World!") 语句,在控制台输出 Hello, World!

 1 # 定义函数
 2 def greet():
 3     """这是函数的文档注释"""
 4     print("Hello!")
 5 
 6 
 7 # 调用函数
 8 greet()
 9 print("程序执行完毕")
10 
11 
12 def t1() -> None: #与上面的greet是一样的效果
13     print("t1!")
14 
15 t1()
16 
17 # 函数的参数
18 def greet_1(name):
19     print("Hello," + name + "!")
20 
21 # greet_1() # 因为greet_1函数声明了参数,不传参数就会报错
22 greet_1("Alice") # 调用时,写的数据就称为实参
23 greet_1("Bob")

4.3. 函数的参数

函数可以接受参数,参数是在函数定义时指定的变量,用于接收调用函数时传入的值,这样可以使函数更加灵活,能够根据不同的输入执行不同的操作。

4.3.1. 位置参数

位置参数是最常见的参数类型,调用函数时传入的参数值会按照定义的顺序依次赋给函数中的参数。

  • 形参:在函数定义时,小括号中的参数统称为形参,形式上参数,本质上就是一个变量,用来接收数据的
  • 实参:在函数调用时,通过小括号中写入的参数,这些参数会传递对应的参数,位置参数就是一一对应的去传递
 1 def add_numbers(a, b):
 2     """这个函数用于计算两个数的和。"""
 3     return a + b # return用来给函数设置返回值的
 4 
 5     
 6 # 调用add_numbers函数,传入两个位置参数
 7 result = add_numbers(3, 5)
 8 print(result)  # 输出: 8
 9 
10 
11 # 调用函数
12 # result = add_numbers(5) # 少一个参数
13 # result = add_numbers(5, 6, 7) # 多传一个参数
14 result = add_numbers(5, 6)  # 正确调用,
15 # 函数有返回值,可以通过赋值符号,将返回值赋值给变量,
16 # result就保存了add_numbers(5, 6)该函数的返回值
17 print("result", result)

在上述示例中,add_numbers 函数定义了两个位置参数 a b,当调用该函数时,传入的 3 5 会分别赋给 a b,然后函数内部计算 a + b 的值并返回。

使用位置参数,需要一一对对,这个有点麻烦,所以 python 也提供关键字参数,后面学习

4.4. 函数的返回值

函数可以通过 return 语句返回一个值,这个值可以是任何数据类型,调用函数的地方可以接收并使用这个返回值。

 1 def get_max(a, b):
 2     """这个函数用于比较两个数并返回较大的数。"""
 3     if a > b:
 4         return a  # return会提前结束函数,所以return执行了,后面的代码就不会执行了
 5     # 尽量不要有过多缩进,缩进地狱,代码缩进18层,导致代码可读变差
 6     # else
 7     #     return b
 8     # return只能在函数中使用,没有函数就不能使用
 9     return b  # return和break的区别,break是结束循环的,return是结束函数的,函数都结束函数。
10 
11 
12 # 那么函数中的循环肯定也结束了
13 
14 # 调用get_max函数,并接收返回值
15 max_value = get_max(5, 3)
16 print(max_value)  # 输出: 5
17 
18 
19 def t1():
20     for i in range(10):
21         if i == 5:
22             return # 终止函数,函数都结束了,函数中的循环肯定也结束了
23             # break # 终止循环
24         print(i)
25     print("t1")  # 上面的return就提前结束函数,这行代码是不会运行的
26 
27 t1()

如果函数没有明确的 return 语句,或者 return 语句后面没有跟任何值,函数会默认返回 None

  • None 是 Python 中表示“无”的特殊单例对象,用于标识函数未显式返回值
def greet(name):print(f"Hello, {name}!")result = greet("Alice")  # 输出:Hello, Alice!
print(result)            # 输出:None(函数没有返回值)def check_even(num):if num % 2 == 0:return  # 无返回值else:return "Odd"print(check_even(4))  # 输出:None
print(check_even(5))  # 输出:"Odd"

4.4.1. return 与 break 的区别

  • return:只能在函数中使用,作用是提前结束函数,并返回数据
  • break:在循环中使用,作用是提前结束循环

4.5. 实战场景

使用函数来优化计算器程序

 1 def input_num(hint: str):
 2     # 定义一个布尔变量,用于标记x_str是否是纯数字,初始值为False
 3     x_is_num = False
 4     # 处理x的输入,使用while循环,只要x_is_num为False就会持续循环
 5     while not x_is_num:
 6         # 提示用户输入第一个数字,并将输入的内容存储到x_str变量中
 7         x_str = input(hint)
 8         # 遍历x_str中的每一个字符
 9         for c in x_str:
10             # 检查当前字符是否不在数字字符集合中
11             if c not in "0123456789":
12                 # 如果有一个字符不是数字,将x_is_num标记为False
13                 x_is_num = False
14                 # 跳出当前的for循环
15                 break
16         # 当for循环正常结束(即没有通过break语句跳出)时,会执行else语句块
17         else:
18             # 如果循环正常结束,说明x_str中的所有字符都是数字,将x_is_num标记为True
19             x_is_num = True
20         # 如果x_is_num为True,说明输入的是纯数字,跳出while循环
21         if x_is_num:
22             return x_str
23         # 如果输入不是纯数字,提示用户输入的内容有误,需要重新输入
24         print("输入的内容有误,请重新输入")
25 
26 def input_mark():
27     while True:
28         # 提示用户输入运算符,并将输入的内容存储到mark变量中
29         mark = input("请输入运算符:")
30         # 检查输入的运算符长度是否为1,并且是否是合法的运算符(+、-、*、/)
31         if len(mark) == 1 and mark in "+-*/":
32             return mark
33         # 如果运算符输入不正确,提示用户运算符不对,需要重新输入
34         print("运算符不对,请重新输入")
35 
36 # # 定义一个布尔变量,用于标记y_str是否是纯数字,初始值为False
37 # y_is_num = False
38 # # 处理y的输入,使用while循环,只要y_is_num为False就会持续循环
39 # while not y_is_num:
40 #     # 提示用户输入第二个数字,并将输入的内容存储到y_str变量中
41 #     y_str = input("请输入第二个数字:")
42 #     # 遍历y_str中的每一个字符
43 #     for c in y_str:
44 #         # 检查当前字符是否不在数字字符集合中
45 #         if c not in "0123456789":
46 #             # 如果有一个字符不是数字,将y_is_num标记为False
47 #             y_is_num = False
48 #             # 跳出当前的for循环
49 #             break
50 #     # 当for循环正常结束(即没有通过break语句跳出)时,会执行else语句块
51 #     else:
52 #         # 如果循环正常结束,说明y_str中的所有字符都是数字,将y_is_num标记为True
53 #         y_is_num = True
54 #     # 如果y_is_num为True,说明输入的是纯数字,跳出while循环
55 #     if y_is_num:
56 #         break
57 #     # 如果输入不是纯数字,提示用户输入的内容有误,需要重新输入
58 #     print("输入的内容有误,请重新输入")
59 
60 def cal():
61     # 初始化变量,用于存储用户输入的第一个数字的字符串形式
62     x_str = input_num("请输入第一个数字:")
63     # 初始化变量,用于存储用户输入的第二个数字的字符串形式
64     y_str = input_num("请输入第二个数字:")
65     # 初始化变量,用于存储用户输入的运算符
66     mark = input_mark()
67     # 将存储数字的字符串转换为浮点数类型
68     x = float(x_str)
69     y = float(y_str)
70 
71     # 根据用户输入的运算符进行相应的数学运算
72     if mark == "+":
73         r = x + y
74     elif mark == '-':
75         r = x - y
76     elif mark == '*':
77         r = x * y
78     elif mark == '/':
79         r = x / y
80 
81     # 打印计算结果,使用f-string格式化输出
82     print(f"{x} {mark} {y} = {r}")
83 
84 cal()

 

http://www.jsqmd.com/news/577851/

相关文章:

  • 0401
  • AllTube Download 10个实用技巧:从基础下载到高级格式转换
  • B站资源收藏困境终结者:BiliTools如何让你轻松拥有离线媒体库
  • 从McCabe到Tessy:手把手教你为嵌入式C代码计算并控制圈复杂度(避坑指南)
  • OpenClaw夜间任务方案:千问3.5-9B完成数据备份与监控
  • 在语音对话中,OpenClaw 的语音识别是否支持声纹识别?
  • vue-treeselect源码深度剖析:理解组件内部工作原理
  • 2026石雕牌坊厂家核心维度评测深度解析 - 优质品牌商家
  • 终极TFLint配置完全指南:从基础设置到高级自定义规则的完整教程
  • 实战应用:基于快马AI与WebSocket构建w777.7cc式实时对战游戏雏形
  • 抖音批量下载工具高效应用全攻略:从单视频到批量采集的完整指南
  • XXL-SSO开源项目未来展望:技术趋势与roadmap解读
  • 2026年西安专业媒体发稿平台有哪些?专业服务商选型指南 - 发稿平台推荐
  • OpenClaw 的模型训练中,是否使用了知识蒸馏(KD)?教师模型如何选择?
  • 河北金属周转框、移动仓储笼、带轮仓储笼生产厂家定做 - 企业推荐官【官方】
  • InstantID高级应用:实现人脸表情、姿态的精准控制指南
  • 如何快速开始使用Mantl:5步搭建企业级容器集群
  • 对于对话中的文本生成,OpenClaw 的推理速度优化技术?
  • LearnDataScience逻辑回归分析:轻松理解分类问题解决方案
  • 通俗易懂入门指南:大模型是什么?收藏这份小白必看干货!
  • 重庆矿山车辆计数软件怎么联系?初阳科技AI边缘计算方案领跑行业 - 企业推荐官【官方】
  • 多模态跨语言翻译引擎实战指南:本地化部署与场景化应用
  • DeepSeek-Coder-V2-Lite-Instruct部署架构设计:高可用AI编程服务的最佳实践
  • 终极磁盘空间管理指南:dua-cli处理百万级文件节点的完整教程
  • 2026 超防滑瓷砖场景化推荐榜 安全适配全空间,选砖不踩雷 - 企业推荐官【官方】
  • 网格布、内墙保温网格布、外墙保温网格布、玻璃纤维网格布厂家联系电话 - 企业推荐官【官方】
  • 告别键盘连击烦恼:这款开源工具让你的机械键盘重获新生
  • OpenClaw 的对话系统是否支持对话流的实时监控面板?
  • 大数据产品与区块链:数据可信共享方案
  • MoltenVK游戏引擎集成终极指南:10个高效集成技巧