软件测试升职加薪必看系列:自动化测试Python进阶(四)

三模冗余设计 在数字电路设计中,Voter模块(表决器) 和 三模冗余(Triple Modular Redundancy, TMR) 是高可靠性系统的核心设计技术,主要用于容错和抗辐射(如航天、医疗设备等关键领域)。容错机制:若任一模块故障(如SEU,单粒子翻转),其他两个模块仍能保证正确输出。功耗与面积:TMR会显著增加资源占用(约3倍),需权衡可靠性和成本。航天电子:抗辐射芯片(如FPGA)中用于防止单粒子翻转(SEU)。故障检测:可扩展设计以检测并隔离故障模块(如通过BIST)。 阅读详情

Python进阶4

自定义序列类型

序列类型的分类

按照序列存储数据的类型

  • 容器序列:list, tuple, deque
  • 扁平序列:str, bytes, array.array, bytearray

按照序列是否可变

  • 可变序列:list, deque, array.array, bytearray
  • 不可变序列:str, tuple, bytes

序列的abc继承关系

引言

  • collections.abc模块中有很多内置的抽象基类
  • 序列主要和两个抽象基类有关:Sequence 和 MutableSequence

细节

Sequence

"""
Sequence 抽象基类
它继承了Sized Iterable Contain 这三个抽象基类
"""
class Sequence(Sized, Iterable, Container):

    """All the operations on a read-only sequence.

    Concrete subclasses must override __new__ or __init__,
    __getitem__, and __len__.
    """

    __slots__ = ()

    @abstractmethod
    def __getitem__(self, index):
        raise IndexError

    def __iter__(self):
        i = 0
        try:
            while True:
                v = self[i]
                yield v
                i += 1
        except IndexError:
            return

    def __contains__(self, value):
        for v in self:
            if v == value:
                return True
        return False

    def __reversed__(self):     # 该魔法函数使得序列类型可以反转
        for i in reversed(range(len(self))):
            yield self[i]
class Sized(metaclass=ABCMeta):

    __slots__ = ()

    @abstractmethod
    def __len__(self):      # 这个魔法函数使得序列类型可以使用 len()获得长度
        return 0

    @classmethod
    def __subclasshook__(cls, C):
        if cls is Sized:
            if any("__len__" in B.__dict__ for B in C.__mro__):
                return True
        return NotImplemented
class Iterable(metaclass=ABCMeta):

    __slots__ = ()

    @abstractmethod
    def __iter__(self):     # 这个魔法函数使得序列类型可以进行 for 循环
        while False:
            yield None

    @classmethod
    def __subclasshook__(cls, C):
        if cls is Iterable:
            if any("__iter__" in B.__dict__ for B in C.__mro__):
                return True
        return NotImplemented
class Container(metaclass=ABCMeta):

    __slots__ = ()

    @abstractmethod
    def __contains__(self, x):  # 这个魔法函数使得序列类型可以使用 in 操作符
        return False

    @classmethod
    def __subclasshook__(cls, C):
        if cls is Container:
            if any("__contains__" in B.__dict__ for B in C.__mro__):
                return True
        return NotImplemented

MutableSequence

class MutableSequence(Sequence):

    __slots__ = ()

    """All the operations on a read-write sequence.

    Concrete subclasses must provide __new__ or __init__,
    __getitem__, __setitem__, __delitem__, __len__, and insert().

    """

    @abstractmethod
    def __setitem__(self, index, value):
        raise IndexError

    @abstractmethod
    def __delitem__(self, index):
        raise IndexError
        
    def __iadd__(self, values):     # 使得序列可以使用 += 运算符号进行计算
        self.extend(values)
        return self
    
    # ......只列出几个有代表意义的魔法函数......
    # 这些魔法函数使得序列类型可以改变

序列的+、+=和extend

引言

  • 对于可变序列,我们有三种方式来扩充原始序列
  • 三种方式有原理和效率上的不同,我们要根据实际情况选择合适的方式来使用

使用范例

"""
普通的加法会在内存中产生一个新的序列对象
时间 空间开销相对比较大
必须要是类型完全一致才能够使用这种合并方式
"""
a, b, c = [1, 2], [3, 4], (5, 6)

d = a + b   # [1, 2] + [3, 4]
print(d)

# result:
# [1, 2, 3, 4]

d = a + c   # [1, 2] + (5, 6)
print(d)

# result:
# TypeError: can only concatenate list (not "tuple") to list
"""
+= 可以理解为原地加,单纯地在原对象上进行修改,效率比 + 要高很多
这个功能背后有一个魔法函数,__iadd__(self, values)
上一小节中有这个函数具体的实现,我们可以看到,它是调用了 extend()方法
所以本质上,它和调用 extend()函数产生的效果是一模一样的
"""
a, b, c = [1, 2], [3, 4], (5, 6)

a += b
print(a)

# result:
# [1, 2, 3, 4]

a += c
print(a)
# result:
[1, 2, 3, 4, 5, 6]

在鸭子类型那一小节,我们分析了extend()函数的参数要求,只要是可迭代类型都能够作为参数扩充列表。

+=操作本质上就是调用 extend() 函数,所以能将列表和元组进行合并也就不奇怪了,因为他们本质上都是可迭代的类型。

实现可切片的对象

引言

  • 切片介绍
# 使用模式:[start:end:step]
"""
start: 切片开始的位置,默认是 0
end: 切片截止(不包括)的位置,默认是列表长度
step: 切片的步长,默认是 1
start和end为默认值时可以省略不写,step为默认值时可以连同最后的冒号一起省略
step为负数时,表示反向切片,此时需满足: start > end
"""
  • 切片举例
li = [8, 4, 3, 2, 1, 7]
li[::]      # 返回原序列
li[::-1]    # 返回原序列的逆序列表
li[::2]     # 隔一个取一个,所有偶数位置
li[1::2]    # 隔一个取一个,所有奇数位置
li[3:6]     # 取[3, 6)区间内的所有元素,左包含,右不包含
li[0:666]   # 结束位置大于列表长度,从尾部截断,返回原列表
li[666:]    # 开始位置大于列表长度,直接返回空列表

li = [6, 6]
li[:0] = [1, 2]     # 列表头部插入元素 [1, 2, 6, 6]
li[1:1] = [1, 1]    # 列表的某一位置插入元素 [6, 1, 1, 6]
li[:1] = [1, 1]     # 替换列表元素 [1, 1, 6]
li[1:] = [1, 1]     # 替换列表元素 [6, 1, 1]

使用案例

class Group:
    def __init__(self, group_name, staffs):
        self.group_name = group_name
        self.staffs = staffs
        
    def __reversed__(self):     # reversed(group)
        self.staffs.reverse()
        
    """
    在使用切片和索引访问操作时,相关的参数会传递到 __getitem__(self, item) 中
    我们通常希望,切片返回的对象和原对象是同一种类型
    使用切片的话,传入的item是一个slice类型
    使用索引访问,传入的item是一个int类型
    """
    def __getitem__(self, item):  # 对象可切片的关键
        cls = type(self)    # 获得该实例的类型
        if isinstance(item, slice):
            return cls(self.group_name, self.staffs[item])  # 委托给列表实现切片
        elif isinstance(item, int):
            return self.staffs[item]
    
    def __len__(self):
        return len(self.staffs)
        
    def __iter__(self):
        return iter(self.staffs)    # 后面会详细讲解
        
    def __contains__(self, item):
        return item in self.staffs   # 同样委托给列表的in操作来实现
    
    def __str__(self):
        return "name:{name}\nstaffs:{staffs}".format(name=self.group_name, staffs=self.staffs)


staffs = ["MetaTian0", "MetaTian1", "MetaTian2"]
group = Group("HIT", staffs)

print(group[1])     # 索引访问
print(group[0:2])   # 切片
reversed(group)     # 反转
print(group)
print(len(group))   # 长度
print("MetaTian0" in group, "MetaTian6" in group)   # in 操作符

# result:
# MetaTian1
# name:HIT; staffs:['MetaTian0', 'MetaTian1']
# name:HIT; staffs:['MetaTian2', 'MetaTian1', 'MetaTian0']
# 3
# True False

bisect模块

引言

  • 如果我们在一个有序序列中需要增加一个元素,但任然要维持序列的有序性,可以使用append()添加元素,再调用sort()来重新排序。
  • bisect模块用来维持已排序序列(升序)的顺序,效率更高。
  • 两个关键函数insort()和bisect

如果大家对于学习Python有任何问题,学习方法,学习路线,如何学习有效率的问题,可以随时来咨询我,或者缺少系统学习资料的,我做这行年头比较久,自认为还是比较有经验的,可以帮助大家提出建设性建议,这是我的Python交流qun:785128166,有任何问题可以随时来咨询我。
 

使用案例

import bisect

int_list = []
"""
在插入过程中维护序列的有序性
"""
bisect.insort(int_list, 2)
bisect.insort(int_list, 6)
bisect.insort(int_list, 1)
bisect.insort(int_list, 3)
bisect.insort(int_list, 5)

print(int_list)

# result:
# [1, 2, 3, 5, 6]

"""
查询一个元素在序列中应该插入的位置
bisect(): 同值元素默认插在右侧
bisect_left(): 同值元素默认插在左侧
"""
print(bisect.bisect(int_list, 3))
print(bisect.bisect_left(int_list, 3))

# result:
# 3
# 2

列表一定是最好的吗

引言

使用案例

import array
"""
使用前要引入array模块,要申明存储的对象类型
"""

my_array = array.array("i")
my_array.append(666)
my_array.append(4)
my_array.extend([1, 2, 3])
my_list = my_array.tolist()

# 大部分基本的操作函数和序列差不多,这里就不做详细介绍
print(my_array)

# result:
# array('i', [666, 4, 1, 2, 3])
# [666, 4, 1, 2, 3]

列表推导、生成器表达式、字典推导

引言

  • 推导表达式是一种更加简洁高效,生成相关对象的一种方式

使用案例

"""
列表推导
生成1-20中的奇数
"""
# 普通方式
odd_list = []
for i in range(1, 21):
    if i%2 == 1:
        odd_list.append(i)

# 列表推导
odd_list = [i for i in range(1, 21) if i%2 == 1]

"""
生成器表达式
后面部分会详细介绍其原理
"""
odd_list = (i for i in range(1, 21) if i%2 == 1)
print(type(odd_list))

# result:
# <class 'generator'>

for item in odd_list:
    print(item, end=' ')
    
# result:
# 1 3 5 7 9 11 13 15 17 19 

"""
字典推导式
"""
my_dict = {"a":1, "b":2, "c":3}
reversed_dict = {val:k for k, val in my_dict.items()}
print(reversed_dict)

# result:
# {1: 'a', 2: 'b', 3: 'c'}
ansys命令流力磁耦合仿真 文章目录前言一、力磁耦合仿真流程二、静力学仿真三、力磁耦合模型构建四、静磁学仿真总结 前言 一、力磁耦合仿真流程 力磁耦合有限元仿真流程中,首先进行静力学仿真,经过前处理模块、分析计算模块和后处理模块提取三维模型单元应力,然后根据力磁耦合方程中,通过matlab将单元应力导入到磁导率与应力的关系式中,得到单元的相对磁导率。最后采用载荷传递耦合方式,进行静磁学模拟仿真,分析计算得到该载荷下试件的磁场分布。,如下图所示为力磁耦合仿真流程图: 二、静力学仿真 下图为中心预制条形缺陷的Q235钢板试.. 阅读详情

相关推荐

RGB接口电容触摸屏驱动(一)模块介绍

RGB接口电容触摸屏驱动(一)模块介绍

杰克拉力船长个人博客 7874

使用Freemaker自定义生成Java、python代码

使用Freemaker的Java、python代码生成器代码生成简介代码Entity模板文件Mapper.XML模板文件DAO模板文件ServiceInterface模板文件ServiceImpl模板文件 代码生成简介 freemarket的语法知识: https://blog.youkuaiyun.com/ljk126wy/article/details/82978442 通过下面的方法可以自己自定义的去生...

qq_37112807的博客 1294

卡诺图化简法

目录 1.学前需要了解知识点 2.卡诺图(karnaugh map) 3.逻辑函数的卡诺图化简法 4.总结 1.学前需要了解知识点 最小项的定义 最小项的表示方法 最小项的相邻性 最小项的定义:一个函数的某个乘积项包含了函数的全部变量,其中每个变量都以原变量或反变量的形式出现,且仅出现一次,则这个乘积项称为该函数的一个标准积项,通常称为最小项。 最小项的表示方法:通常用来表...

hahasusu的专栏 17万+

一篇很全面的freemarker教程

copy自[url]http://demojava.iteye.com/blog/800204[/url] 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出...

nojob1year的博客 3785

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2209

Knewton自适应学习平台实战:如何用大数据打造个性化教育体验

本文深入解析Knewton自适应学习平台如何利用大数据技术构建个性化教育体验。通过多维度数据采集、动态认知诊断模型和智能推荐系统,平台能精准识别学生知识盲区,提供定制化学习路径。实战案例显示,该方案显著提升完课率并优化学习效率,展现了自适应学习技术的教育变革潜力。

info6的博客 503

freemarker 学习笔记

此章节参考:http://freemarker.foofun.cn/dgui_quickstart_template.html插值(interpolation):${…},输出时用真实值替换插值表达式FTL标签(指令):类似于html标签,这些标签以#开头,自定义的FTL标签使用@来代替#注释:和html一样在模板中可以使用宏作为自定义指令模板内容为输出为带有参数的自定义指令实例模板内容为变量可以设置默认值。

小狗是码农的博客 285

DPABI安装教程

DPABI是是中科院心理研究所严超赣老师团队开发的一款磁共振脑影像数据分析工具包。基于SPM,在安装DPABI之前需要安装好SPM,才能正常使用。SPM的安装方法见文matlab2021a版本条件下安装spm_kidllll的博客-优快云博客 1、下载安装包 下载地址:DPABI: a toolbox for Data Processing & Analysis for Brain Imaging | The R-fMRI Network 2、将下载好的dpabi文件夹移动到matl..

qq_42356925的博客 1万+

freemarker模板引擎,一篇文章看懂基本操作与进阶操作

freemarker模板引擎,小白入门,一篇文章看懂基本操作与进阶操作

一天不写代码难受的博客 5071

【重磅干货】介质损耗因数(tanδ)揭秘:如何精准定位材料劣化最严重的温度?附权威研究PDF!

是评估绝缘材料性能的核心指标,能直接反映材料内部能量损耗和微观结构变化。通过分析tanδ-温度曲线的峰值点,可精准定位材料劣化最严重的温度。:极化损耗峰值的温度点(如环氧树脂的80℃)是材料性能拐点,需重点关注!:图3对比了5种材料的tanδ-温度曲线,峰值温度差异高达50℃!在电力设备、电子元器件等领域,材料的老化与温度密切相关。:[《介质损耗峰值温度在设备寿命预测中的应用》]在不同温度下测量tanδ,绘制曲线图。:[《多材料介质损耗峰值温度对比研究》]:基于tanδ峰值温度开发的。

mubiao05的博客 1349

【Prometheus】prometheus结合cAdvisor监控docker容器运行状态,并且实现实时告警通知

Docker的监控,可以使用Docker自带的stats命令来获取当前主机上运行中的容器的资源使用情况。 例如:容器的CPU使用率、内存占用、网络IO以及磁盘IO等指标。

景天科技苑 6万+

python生成Java模板代码_not_so_free_marker: 依照java freemarker的语法,实现一个python版本的模板渲染工具,用于根据需要生成本文,CSV,代码等等。因为...

NotSoFreeMarker本工具通过设定模板和数据,渲染最终的文本.其中模板的支持if,循环和简单的运算.可用于生成复杂的代码,数据表格等,减少手工劳动.调用方式本工具的目标场景是读取数据文件和模板文件进行处理.模板和数据分别重复使用,组合生成不同的文件(如读取不同表的列,生成pojo和model的代码).这样也便于其它语言调用.此外还提供了基于文本和数据字典的调用,便于python语言调用....

weixin_39564368的博客 417

让 ABAP 复杂内表优雅“喂饱”:Complex Internal Table Filling 全面实战指南

本文为ABAP开发者系统梳理了复杂内表的填充与复制方法。重点介绍了work area的两种声明方式、APPEND操作的多形态用法及其初始值语义,以及VALUE #( )构造器的逐行与整表写法。同时讲解了CORRESPONDING的同名字段映射功能,帮助开发者在"航司与航线"等复杂业务场景中实现最佳实践。文章还涵盖内存优化、可读性建议和常见误区,提供可运行样例,适用于ABAP On-Premise和SAP BTP环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 168

软件测试升职加薪必看系列:自动化测试Python进阶(一)

Python进阶1 Python中一切皆对象 引言 Java语言也是面向对象的语言,但是Python要更加彻底 Python的面向对象特性,是它使用起来灵活的根本所在 对象的特点 可以赋值给一个变量 # 函数也是对象 def test(name): print(name) my_func = test # 注意 只写函数名 和 函数名加括号 的区别 my_func("MetaTian") # 打印:MetaTian 可以添加到集合中去 def plus

测试小小小的博客 261

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

软件测试升职加薪必看系列:自动化测试Python进阶(三)

Python进阶3 深入类和对象 鸭子类型和多态 引言 在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。 例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭子的对象,并调用它的走和叫方法。 在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的走和叫方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名...

测试小小小的博客 320

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

软件测试升职加薪必看系列:自动化测试Python进阶(二)

Python进阶2 魔法函数 引言 魔法函数是Python中定义的,以__开头,__结尾,形如__func__()的函数,一般使用已经存在的魔法函数即可。 使用这样一些函数,可以让我们自定义的类有更加强大的特性。 魔法函数是隐式调用的,不需要我们显示调用。 class Language(object): def __init__(self, language_list): self.lans = language_list # 如果要遍历所有的语言,可以:

测试小小小的博客 332

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

紧急通知,错过这次机会,升职加薪将等到三个月之后

俗话说:"不积跬步无以至千里,不积小流无以成江海”,坚持做正向的事情,慢慢积累,你当下的每一步都是未来的基石和铺垫。在软件测试的职业生涯中也是如此,在工作中坚持做正向积累,你终会到达你想要的那个目标!

YJT1002的博客 884

软件测试升职加薪必看系列:自动化测试Python进阶(十)

Python进阶10 多线程 python中的GIL GIL(Global Interpreter Lock),就是一个锁。 Python中的一个线程对应于 C语言 中的一个线程。 GIL使得同一时刻只有一个线程在一个cpu上执行字节码,无法将多个线程分配到多个cpu上进行同步运行。如果在单核cpu上,线程是并发运行,而不是并行。 image 首先,这样效率不高,但是看似也不会产生数据访问冲突的问题,毕竟同一时刻只有一个线程在一个核上运行嘛,然而: sum = 0 def add(

测试小小小的博客 380

软件测试升职加薪必看系列:自动化测试Python进阶(六)

Python进阶6 对象引用、垃圾回收、可变性 Python中的变量是什么 引言 Python和java中的变量本质不一样,java的变量可以理解为一个盒子,用来容纳我们的对象,使用前要先声明它,好分配给我们合适的内存空间。Python的变量可以理解为一个标签,先构造出对象,再将变量贴在对象上。 Python变量没有类型,对象才有,本质上是指针。同一个变量,可以表示不同对象。 使用案例 """ a 和 b 都贴在了同一个对象上 """ a = [1, 2] b = a a.append(6

测试小小小的博客 266

软件测试升职加薪必看系列:自动化测试Python进阶(七)

Python进阶7 元类编程 Python属性函数 引言 Python中我们对于自己设置的类,尽量要使其属性私有化,获得更好的封装性。 如果要访问和修改私有属性,要为其设置set和get方法。 Python中,可以使用特殊的装饰器将set和get方法属性化,这样就能够使用更简洁的语法去调用这些方法。 使用案例 class Person: def __init__(self, name, age): self.__name = name self._

测试小小小的博客 334

软件测试升职加薪必看系列:自动化测试Python进阶(五)

Python进阶5 深入Python的set和dict dict常用操作 引言 clear(): 清空字典 copy(): 返回一个浅拷贝 fromkeys(): 将可迭代对象中的每一个元素作为key和同一个value拼成字典 get(): 根据key返回value,若无对应的键值对,则返回None,也可以指定默认返回值,和索引访问相比,不会产生异常。 items():返回一个dict_items类型,支持迭代,键值对以元组形式组织 setdefault(): 获取key对应的valu

测试小小小的博客 395

软件测试升职加薪必看系列:自动化测试Python进阶(九)

Python进阶9 Python socket编程 引言 sockets的历史悠久,它们最早在 1971 年的 APPANET 中使用,后来成为1983年发布的Berkeley Software Distribution(BSD)操作系统中的API,称为Berkeley sockets。 Web服务器和浏览器并不是使用sockets的唯一程序,各种规模和类型的客户端 - 服务器(client - server)应用程序也得到了广泛使用。 今天,尽管socket API使用的底层协议已经发展多年

测试小小小的博客 280

软件测试升职加薪必看系列:自动化测试Python进阶(八)

Python进阶8 迭代器和生成器 python的迭代协议 引言 迭代器是访问集合内部元素的一种方式,一般用来遍历数据。 迭代器和用下标索引访问的方式不一样,迭代器是不能返回值的 迭代器提供了一种惰性访问数据的方式,需要的时候才产生数据。 可迭代类型都实现了迭代协议,实际上就是__iter__()这个魔法函数。 可迭代类型和迭代器 前面讲过,collections.abc模块中定义了很多内置的抽象基类,现在我们重点关注其中的两个:Iterable和Iterator Iterable..

测试小小小的博客 284

❤️程序人生 | 为什么越来越多的人用Python来做自动化测试?

这段时间网上很流行一句话: 让自己变得更好,才是解决一切问题的关键。 也许你还从来没想过: 如果现在失业,你的存款能够支撑你多久的日常生活,它能应付哪种级别的风险,例如失业、破产、裁员、意外…… 其实生活中有很多“照妖镜”,让你能清楚地看到自己有几分抗风险能力。 可能一场疫情让你处于两难的境地,谁又能保证明天会不会发生些什么。很多时候,你处于岁月静好的生活中,其实暗流涌动,崩塌只在旦夕之间。 而一个真正强大的人,是永远不会停下学习这件事的。因为他知道,落后就意味着被淘汰,这是永恒不变.

2354

学了就能升职加薪?大厂软件测试面试必问的自动化测试框架你真会了吗?

最近我注意到了一个现象,就是每年一到3、4月左右的时候,就会有一大批粉丝朋友来咨询我跳槽、面试这块的问题。

软件自动化测试技术交流、资源分享 101

大厂软件测试面试必问的“自动化测试框架”你真的会了吗?功能测试人备战2022升职加薪最新攻略

做测试这几年来,我注意到了一个现象,就是每年一到12月份左右的时候,就会有一大批粉丝朋友来咨询我跳槽、面试技巧等这方面的问题。

软件自动化测试技术交流、资源分享 193
上一篇: 软件测试升职加薪必看系列:自动化测试Python进阶(三)
下一篇: 软件测试升职加薪必看系列:自动化测试Python进阶(五)
测试小小小
博客等级 码龄6年 265粉丝 364原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值