软件测试基础十三(python 函数)
函数
1. 函数的意义
- 代码复用
-
- 提高效率:Python中的函数允许将一段可重复使用的代码封装起来。例如,在一个数据分析项目中,可能需要多次计算一组数据的平均值。可以将计算平均值的代码定义为一个函数:
def calculate_average(num_list):return sum(num_list) / len(num_list)
-
-
- 之后,无论在程序的哪个位置需要计算平均值,只要有合适的数据列表,就可以直接调用这个函数,而不需要每次都重新编写计算平均值的代码。这样可以大大提高代码编写的效率。
-
-
- 减少代码冗余:假设在一个Web应用程序中,需要对用户输入的多个表单数据进行验证,检查是否为合法的电子邮件地址。如果不使用函数,可能需要在每个验证表单数据的地方都编写相同的验证代码。而通过定义一个函数来验证电子邮件地址,可以避免这种冗余:
import redef validate_email(email):pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'return re.match(pattern, email) is not None
-
-
- 这样,在程序的任何需要验证电子邮件的地方,都可以调用
validate_email函数,使代码更加简洁和易于维护。
- 这样,在程序的任何需要验证电子邮件的地方,都可以调用
-
- 逻辑抽象与模块化
-
- 隐藏实现细节:函数可以将复杂的逻辑封装起来,只暴露必要的接口。例如,在一个机器学习项目中,可能有一个复杂的算法用于训练模型。可以将训练模型的过程封装在一个函数中:
def train_model(data, model_type):# 复杂的模型训练代码,包括数据预处理、选择算法、训练等步骤if model_type == "linear_regression":# 线性回归模型训练代码passelif model_type == "decision_tree":# 决策树模型训练代码pass#...return trained_model
-
-
- 对于调用
train_model函数的其他部分代码,不需要了解模型训练的具体细节,如数据如何预处理、具体的算法实现等。只需要提供合适的数据和模型类型,就可以得到训练好的模型。
- 对于调用
-
-
- 便于代码组织和理解:当程序规模较大时,将代码划分为多个函数可以使程序结构更加清晰。例如,在一个游戏开发项目中,可以将游戏的初始化、游戏循环、玩家操作处理等功能分别封装在不同的函数中:
def initialize_game():# 初始化游戏资源,如加载地图、创建角色等passdef game_loop():# 游戏主循环,包括更新游戏状态、渲染画面等passdef handle_player_actions():# 处理玩家的操作,如移动、攻击等pass
-
-
- 这种模块化的代码结构使得开发人员更容易理解每个部分的功能,也便于多人协作开发,不同的开发人员可以负责不同的函数模块。
-
- 参数化与灵活性
-
- 根据不同输入执行不同操作:函数可以接受参数,根据传入的参数值执行不同的操作。例如,一个绘图函数可以根据传入的参数绘制不同形状和颜色的图形:
import matplotlib.pyplot as pltdef draw_shape(shape_type, color):if shape_type == "circle":circle = plt.Circle((0.5, 0.5), 0.3, color=color)plt.gca().add_patch(circle)elif shape_type == "square":square = plt.Rectangle((0.3, 0.3), 0.4, 0.4, color=color)plt.gca().add_patch(square)plt.axis('equal')plt.show()
-
-
- 调用
draw_shape函数时,可以传入不同的形状类型(如"circle"或"square")和颜色参数,函数就会根据这些参数绘制出相应的图形。
- 调用
-
-
- 方便代码调试和测试:由于函数具有明确的输入和输出,在调试和测试代码时更加方便。可以针对单个函数进行单元测试,检查其对于不同输入的输出是否符合预期。例如,对于上面的
calculate_average函数,可以编写如下的单元测试:
- 方便代码调试和测试:由于函数具有明确的输入和输出,在调试和测试代码时更加方便。可以针对单个函数进行单元测试,检查其对于不同输入的输出是否符合预期。例如,对于上面的
assert calculate_average([1, 2, 3]) == 2
assert calculate_average([4, 5, 6]) == 5
-
-
- 通过这种方式,可以确保函数的正确性,并且在函数出现问题时更容易定位和修复错误。
-
2. 函数的定义和调用
- 定义函数:
-
- 使用
def关键字来定义一个函数。函数定义包括函数名、参数列表和函数体。 - 例如:
- 使用
def greet():print("Hello!")
-
- 这里定义了一个名为
greet的函数,它没有参数,函数体中只是打印了“Hello!”。
- 这里定义了一个名为
- 调用函数:
-
- 通过函数名后跟括号来调用函数。
- 例如:
greet()会执行上面定义的greet函数,输出“Hello!”。
3. 函数的参数
- 实参和形参:
-
- 形参(形式参数):在函数定义中,出现在函数名后的括号里的变量名,用于接收调用函数时传入的值。
- 实参(实际参数):在调用函数时,传递给函数的具体值。
- 例如:
def add(a, b):return a + bresult = add(3, 5)
-
- 这里
a和b是形参,3和5是实参。
- 这里
- 缺省参数(默认参数):
-
- 在函数定义时,可以为参数指定一个默认值。如果在调用函数时没有为该参数提供值,就会使用默认值。
- 例如:
def greet(name="World"):print(f"Hello, {name}!")greet() # 输出 "Hello, World!"
greet("Alice") # 输出 "Hello, Alice!"
4. 返回值
- 使用
return语句返回值:
-
- 函数可以使用
return语句返回一个值或多个值。如果没有return语句,函数默认返回None。 - 例如:
- 函数可以使用
def add(a, b):return a + bresult = add(3, 5)
print(result) # 输出 8
- 返回多个值:
-
- 可以使用元组来返回多个值。
- 例如:
def calculate(a, b):sum_result = a + bproduct_result = a * breturn sum_result, product_resultsum_value, product_value = calculate(3, 5)
print(sum_value) # 输出 8
print(product_value) # 输出 15
5. 函数嵌套调用
- 概念:
-
- 一个函数可以在其内部调用另一个函数。
- 例如:
def add(a, b):return a + bdef multiply(a, b):return a * bdef calculate(a, b):sum_result = add(a, b)product_result = multiply(a, b)return sum_result, product_resultresult = calculate(3, 5)
print(result) # 输出 (8, 15)
6. 变量的作用域
- 局部变量:
-
- 在函数内部定义的变量称为局部变量,它们只能在函数内部访问。
- 例如:
def my_function():x = 10print(x)my_function() # 输出 10
# print(x) # 这里会报错,因为 x 是局部变量,在函数外部无法访问
- 全局变量:
-
- 在函数外部定义的变量称为全局变量,它们可以在整个程序中访问。
- 例如:
x = 10def my_function():print(x)my_function() # 输出 10
-
- 如果在函数内部要修改全局变量的值,需要使用
global关键字进行声明。 - 例如:
- 如果在函数内部要修改全局变量的值,需要使用
x = 10def my_function():global xx = 20print(x)my_function() # 输出 20
print(x) # 输出 20
7. 匿名函数(lambda 函数)
- 定义和使用:
-
- 匿名函数是一种没有名称的函数,通常使用
lambda关键字来定义。 - 例如:
- 匿名函数是一种没有名称的函数,通常使用
add = lambda a, b: a + b
result = add(3, 5)
print(result) # 输出 8
-
- 这里定义了一个匿名函数,它接受两个参数
a和b,并返回它们的和。
- 这里定义了一个匿名函数,它接受两个参数
- 应用场景:
-
- 匿名函数通常用于一些简单的操作,特别是作为参数传递给其他函数时非常方便。
- 例如,
sorted()函数可以接受一个key参数,用于指定排序的依据。可以使用匿名函数来定义这个依据。 - 例如:
my_list = [(1, 2), (3, 1), (2, 3)]
sorted_list = sorted(my_list, key=lambda x: x[1])
print(sorted_list) # 输出 [(3, 1), (1, 2), (2, 3)]
总之,函数是 Python 编程中的重要概念,掌握函数的定义、调用、参数、返回值、嵌套调用、变量作用域和匿名函数等内容,可以使程序更加模块化、可维护和可扩展。
相关文章:
软件测试基础十三(python 函数)
函数 1. 函数的意义 代码复用 提高效率:Python中的函数允许将一段可重复使用的代码封装起来。例如,在一个数据分析项目中,可能需要多次计算一组数据的平均值。可以将计算平均值的代码定义为一个函数: def calculate_average(nu…...
计算机网络——HTTP篇
基础篇 IOS七层网络模型 TCP/IP四层模型? 应⽤层:位于传输层之上,主要提供两个终端设备上的应⽤程序之间的通信,它定义了信息交换的格式,消息会交给下⼀层传输层来传输。 传输层的主要任务就是负责向两台设备进程之间…...
信息化运维方案,实施方案,开发方案,信息中心安全运维资料(软件资料word)
1 编制目的 2 系统运行维护 2.1 系统运维内容 2.2 日常运行维护方案 2.2.1 日常巡检 2.2.2 状态监控 2.2.3 系统优化 2.2.4 软件系统问题处理及升级 2.2.5 系统数据库管理维护 2.2.6 灾难恢复 2.3 应急运行维护方案 2.3.1 启动应急流程 2.3.2 成立应急小组 2.3.3 应急处理过程 …...
自动化工具 Gulp
自动化工具 gulp 摘要 概念:gulp用于自动化开发流程。 理解:我们只需要编写任务,然后gulp帮我们执行 核心概念: 任务:通过定义不同的任务来组织你的构建流程。 管道:通过管道方式将文件从一个插件传递…...
css实现div被图片撑开
固定好盒子的宽度,高度随传过来的图片大小决定 <div class"tab-con"> <img:src"concertInfo.detail"alt""> </div>.tab-con {margin-bottom: 20px;width: 700px;img {width: 700px;height: auto;object-fit: cont…...
Power Pivot、Power BI 和 SQL Server Analysis Services 的公式语言:DAX(数据分析表达式)
DAX(Data Analysis Expressions)是一种用于 Power Pivot、Power BI 和 SQL Server Analysis Services 的公式语言,旨在帮助用户进行数据建模和复杂计算。DAX 的设计初衷是使数据分析变得简单而高效,特别是在处理数据模型中的表关系…...
大模型应用编排工具Dify二开之工具和模型页面改造
1.前言 简要介绍下 dify: 一款可以对接市面上主流大模型的任务编排工具,可以通过拖拽形式进行编排形成解决某些业务场景的大模型应用。 背景信息: 环境:dify-0.8.3、docker-21 最近笔者在做 dify的私有化部署和二次…...
Pytorch用BERT对CoLA、新闻组文本数据集自然语言处理NLP:主题分类建模微调可视化分析...
原文链接:https://tecdat.cn/?p38181 自然语言处理(NLP)领域在近年来发展迅猛,尤其是预训练模型的出现带来了重大变革。其中,BERT 模型凭借其卓越性能备受瞩目。然而,对于许多研究者而言,如何高…...
LightGBM-GPU不能装在WSL,能装在windows上
这是一篇经验总结文章,注重思路,忽略细节。 1.起因 用多个机器学习方法训练模型,比较性能,发现Light GBM方法获得的性能明显更高,但问题是在CPU上训练的速度特别特别慢,需要用GPU训练。 2.开始装LightGB…...
工业相机常用功能之白平衡及C++代码分享
目录 1、白平衡的概念解析 2、相机白平衡参数及操作 2.1 相机白平衡参数 2.2 自动白平衡操作 2.3 手动白平衡操作流程 3、C++ 代码从XML读取参数及设置相机参数 3.1 读取XML 3.2 C++代码,从XML读取参数 3.3 给相机设置参数 1、白平衡的概念解析 白平衡(White Balance)…...
Foundry 单元测试
安装 Foundry 如果你还没有安装 Foundry,请按照此处的说明进行操作:Foundry 安装 Foundry Hello World 只需运行以下命令,它将为你设置环境,创建测试并运行它们。(当然,这假设你已经安装了 Foundry&…...
idea database连接数据库后看不到表解决方法、格式化sql快捷键
最下面那个勾选上就可以了 或 格式化sql快捷键: 先选中, 使用快捷键格式化 SQL: Windows/Linux: Ctrl Alt L macOS: Cmd Alt L...
【数学二】线性代数-向量-向量组的秩、矩阵得秩
考试要求 1、理解 n n n维向量、向量的线性组合与线性表示的概念. 2、理解向量组线性相关、线性无关的概念,掌握向量组线性相关、线性无关的有关性质及判别法. 3、了解向量组的极大线性无关组和向量组的秩的概念,会求向量组的极大线性无关组及秩. 4、了解向量组等价的概念,…...
ABAP开发-内存管理
系列文章目录 文章目录 系列文章目录前言一、概述二、程序间调用三、外部会话和内部会话四、SAP内存与ABAP内存五、实例总结 前言 一、概述 内存是程序之间为了传递数据而使用的共享存储空间,在每个程序里使用的内存有SAP内存和ABAP内存 SAP内存分类 SAP内存 主会…...
【Ajax】跨域
文章目录 1 同源策略1.1 index.html1.2 server.js 2 如何解决跨域2.1 JSONP2.1.1 JSONP 原理2.1.2 JSONP 实践2.1.3 jQuery 中的 JSONP 2.2 CORS2.2.1 CORS实践 3 server.js 1 同源策略 同源策略(Same-Origin Policy)最早由 Netscape 公司提出,是浏览器的一种安全策…...
yii 常用一些调用
yii 常用一些调用 (增加中) 调用YII框架中 jquery:Yii::app()->clientScript->registerCoreScript(‘jquery’); framework/web/js/source的js,其中registerCoreScript key调用的文件在framework/web/js/packages.php列表中可以查看 在view中得到当前contro…...
网页版五子棋——用户模块(服务器开发)
前一篇文章:网页版五子棋—— WebSocket 协议-CSDN博客 目录 前言 一、编写数据库代码 1.数据库设计 2.配置 MyBatis 3.创建实体类 4.创建 UserMapper 二、前后端交互接口 1.登录接口 2.注册接口 3.获取用户信息 三、服务器开发 1.代码编写 2.测试后端…...
以RK3568为例,ARM核心板如何实现NTP精准时间同步?
背景 网络时间协议NTP(Network TimeProtocol)是用于互联网中时间同步的标准互联网协议,可以把计算机的时间同步到某些时间标准。NTP对于我们产品来说有什么用呢,简单的讲,当你的设备时间不准确了,你可以接…...
Twitter(X)2024最新注册教程
Twitter 现名为X,因为图标是一只小鸟的形象,大家也叫它小蓝鸟(埃隆马斯克于 2023 年对该平台进行了品牌重塑),目前仍然是全球最受欢迎的社交媒体和微博平台之一,全球活跃用户量大概在4.5亿。尤其是欧美国家…...
10.桥接模式设计思想
10.桥接模式设计思想 目录介绍 01.桥接模式基础 1.1 桥接模式由来1.2 桥接模式定义1.3 桥接模式场景1.4 桥接模式思考1.5 解决的问题 02.桥接模式实现 2.1 罗列一个场景2.2 桥接结构2.3 桥接基本实现2.4 有哪些注意点 03.桥接实例演示 3.1 需求分析3.2 代码案例实现3.3 是否可…...
消费级显卡也能跑!cv_resnet101_face-detection_cvpr22papermogface GPU算力适配实战
消费级显卡也能跑!cv_resnet101_face-detection_cvpr22papermogface GPU算力适配实战 1. 项目简介与核心价值 今天给大家分享一个特别实用的人脸检测工具——基于MogFace模型的高精度人脸检测系统。这个工具最大的亮点就是消费级显卡就能流畅运行,不需…...
League-Toolkit启动故障系统性排查方案:从现象到根治的完整解决路径
League-Toolkit启动故障系统性排查方案:从现象到根治的完整解决路径 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 问…...
Qwen2.5-72B-GPTQ开源大模型:农业病虫害识别与防治方案生成
Qwen2.5-72B-GPTQ开源大模型:农业病虫害识别与防治方案生成 1. 模型介绍 Qwen2.5-72B-Instruct-GPTQ-Int4是通义千问大模型系列的最新版本,专为复杂任务优化设计。这个72亿参数的模型经过指令调优和4-bit量化处理,在保持高性能的同时大幅降…...
OpenClaw+百川2-13B-4bits:自媒体人的内容创作流水线搭建
OpenClaw百川2-13B-4bits:自媒体人的内容创作流水线搭建 1. 为什么需要自动化内容流水线 作为一个长期运营科技类自媒体的创作者,我每天需要完成热点追踪、大纲构思、初稿撰写、排版发布等一系列重复性工作。最痛苦的不是写作本身,而是大量…...
童年回忆杀!仿《燃烧的蔬菜》游戏完整源码 免费!!!
谁的童年没玩过《燃烧的蔬菜》!这款经典的塔防休闲游戏,用蔬菜当炮弹击退怪物,治愈又解压。今天用PythonPygame复刻核心玩法,包含蔬菜发射、怪物生成、碰撞检测、计分系统,完整源码直接运行,带你重温童年&a…...
终极指南:Jellyfin豆瓣插件完整配置手册,30分钟打造中文媒体库
终极指南:Jellyfin豆瓣插件完整配置手册,30分钟打造中文媒体库 【免费下载链接】jellyfin-plugin-douban Douban metadata provider for Jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-douban 还在为Jellyfin媒体库缺少…...
从单张图片到实时视频流:给RK3588上的YOLOv11推理Demo加个OpenCV‘外挂’
从单张图片到实时视频流:RK3588上YOLOv11与OpenCV的高效整合实战 当开发者首次在RK3588上成功运行YOLOv11的静态图片推理时,那种成就感往往伴随着新的渴望——如何让这个模型"活"起来?本文将带你突破单帧测试的局限,通过…...
超长上下文20万字!internlm2-chat-1.8b在Ollama中的高效部署与调用详解
超长上下文20万字!internlm2-chat-1.8b在Ollama中的高效部署与调用详解 想体验一个能记住超长对话、处理20万字文档的AI助手吗?今天,我们就来聊聊如何在Ollama上快速部署和玩转InternLM2-Chat-1.8B这个“小身材、大能量”的模型。它不仅能进…...
Detectron2特征图热力可视化实战:从Faster R-CNN到自定义网络
1. 为什么需要特征图热力可视化 当你训练一个目标检测模型时,有没有遇到过这样的困惑:模型在某些场景下表现很好,但在另一些场景却频频出错?作为算法工程师,我们往往只能看到最终的检测结果,却不知道模型内…...
基于Python的宽带业务管理系统毕设源码
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于Python的宽带业务管理系统,以提升宽带服务提供商的业务管理效率和客户服务质量。具体研究目的如下:系统架构…...
