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

50道Python面试题集锦(附答案).pdf 又是一年秋招季,50道python面试题集锦(附答案),pdf版可打印,亲测有效。 立即下载

Python进阶2

魔法函数

引言

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

用魔法函数也可实现上面的功能,而且使用起来会更加简洁。

class Language(object):
    # 没错,这也是一个魔法函数,现在先不关注它
    def __init__(self, language_list):
        self.lans = language_list
        
    # 定义这样一个魔法函数
    def __getitem__(self, item):
        return self.lans[item]

language = Language(["Python", "C", "Lisp"])
for lan in language:
    print(lan)

# result:
# Python
# C
# Lisp

魔法函数对Python的影响

  • 魔法函数不属于定义它的那个类,只是增强了类的一些功能。
  • 类中实现了特定的魔法函数之后,会获得一些奇特的功能,某些操作会变得特别简单。
  • 我们可以采用实现魔法函数来灵活地设计我们需要的类。

常用魔法函数

后续学习会介绍一部分,这里了解即可。

非数学运算

字符串表示

  • __repr__()
  • __str__()

集合、序列

  • __len__()
  • __getitem__()
  • __setitem__()
  • __delitem__()
  • __contains__()

迭代相关

  • __iter__()
  • __next__()

可调用

  • __call__()

with上下文管理器

  • __enter__()
  • __exit__()

数值转换

  • __abs__()
  • __bool__()
  • __int__()
  • __float__()
  • __hash__()
  • __index__()

元类相关

  • __new__()
  • __init__()

属性相关

  • __getattr__(), __setattr__()
  • __getattribute__(), __setattribute__()
  • __dir__()

属性描述符

  • __get__(), __set__(), __delete__()

携程

  • __await__(), __aiter__(), __anext__(), __aenter__(), __aexit__()

数学运算

看一个例子就行了,因为:

  • 运算方式复杂
  • 实际应用不多
# 实现一个二维向量的加法计算
class Vector(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    # 定义了向量对象能够直接相加的魔法函数   
    def __add__(self, v):
        res_v = Vector(self.x + v.x, self.y + v.y)
        return res_v
    
    # 如果你熟悉 java ,这个魔法函数有些类似于 toString()    
    def __str__(self):
        return "x: {0}, y: {1}".format(self.x, self.y)
    
first_vector = Vector(1, 2)
second_vector = Vector(3, 4)
print(first_vector + second_vector)

# result:
# x: 4, y: 6

以len()为例

引言

  • len()函数可以返回一个序列的长度
  • 首先该类型要定义了__len__()方法

原理

当我们使用len()函数获取一些内置对象(list, tuple, set...)的长度时,性能会非常高,因为这些内置对象使用C语言实现的,同时该方法并未对内置对象进行遍历获得长度,而是内置对象维护了一个长度属性,调用方法后,直接进行属性值的读取即可。

结论

  • 某些方法并未我们想象中的那么简单,内部实现时会做很多优化。
  • 尽量使用Python的内置对象,和内置的一些函数,提高效率。

小结

魔法函数使得自定义的类型会具有神奇的功能,让我们可以设计更加灵活的类型,它将我们自定义的类型和一些内建类型建立起了关联,明白了更加底层的一些细节,这里只为后面的的深入学习做了一个铺垫,具体的魔法函数会在后面的部分得到体现。

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

100个Python面试题及答案.docx 100个Python面试题及答案,让你轻松拿offer。精心收集各大公司的面试题。既有基础知识面试题又有Python重点知识点面试题。 立即下载

相关推荐

python100道面试题及解答()全部答案 pycharm 测试过 py3环境)

python面试题100道答案全部 一般的只写了30个答案题目大概有 1、一行代码实现1--100之和 2、如何在一个函数内部修改全局变量 利用global 修改全局变量 3、列出5个python标准库 os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数 re: 正则匹配 math: 数学运算 datetime:处理日期时间

C语言基础概念

C语言基础学习(第三天) 1.程序结构 C 程序结构包括: 1.预处理器指令 2.函数 3.变量 4.语句 & 表达式 5.注释 eg: #include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf(“Hello, World! \n”); return 0; } 1.程序的第一行 #include <stdio.h> 是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。 2.int main() 是主

m0_37775931的博客 619

一份比较好的python基础知识笔试题

一份比较好的python基础知识笔试题,,里面题目仅供参考。

C# 常量

在 C# 编程的世界里,常量是一类特殊的数据元素,它们如同程序中的 “定海神针”,代表着固定的值,在整个程序执行期间都不会发生改变。常量可以涵盖各种基本数据类型,包括整数常量、浮点常量、字符常量、字符串常量以及枚举常量等。这里 明确了常量的数据类型,它必须是一个合法的 C# 基本数据类型或者枚举类型等,比如 int、double、string、自定义的枚举类型等;

2401_83367969的博客 1248

VM虚拟机下,通过无线,有线两种方式连接PLC的设置方法

1,VMware软件:编辑>虚拟网络编辑器。 2.右下角:更改设置(如果可以选中“添加网络”选项,则可考虑略过此步) 3.选中VMnet0,点击桥接模式,选中你的物理机有线网卡。点击确定。 4.点击添加网络,我的添加完是VMnet2,然后选中,像上一步样,点击桥接模式,在下拉菜单中选中笔记本的【无线网卡】,然后点击确定。 5.VMware软件:虚拟机>设置。 6.点击 添加>网络...

weixin_46441715的博客 2万+

动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略

本文深入探讨了对抗Zygisk-IL2CppDumper攻击的Unity游戏安全新策略。通过实时内存监控、动态混淆技术和异常行为检测体系,有效防止关键代码被动态提取。文章详细介绍了内存指纹系统、运行时混淆方案和五维特征模型等实用防御手段,帮助开发者提升游戏安全性。

weixin_29325955的博客 305

Python中的变量与常量

python,变量与常量

Yydsaoligei的博客 534

时频分析之STFT:短时傅里叶变换的原理与代码实现(非调用Matlab API)

STFT function [STFT, f, t] = mystft(x, win, hop, nfft, fs) % function: [STFT, f, t] = stft(x, win, hop, nfft, fs) % % Input: % x - signal in the time domain % win - analysis window function % hop - hop size % nfft - numb

frostime的博客 13万+

以下不是python常量的是_为什么Python决定不使用常量引用?

任何一种语言都有许多设计问题,其中大多数的答案都是“仅仅因为”。很明显,这样的常量与Python的思想体系背道而驰。在但是,您可以使用descriptors生成只读类属性。这不是小事,但也不是很难。它的工作方式是,可以使用property修饰符来创建属性(看起来像属性但在访问时调用方法的东西);如果创建getter而不是setter属性,则将获得一个只读属性。元类编程的原因是,由于__init__...

weixin_39950470的博客 1538

SORT算法在遮挡下总跟丢?深入OC-SORT源码,拆解其三大创新点如何解决卡尔曼滤波的顽疾

本文深入解析OC-SORT算法如何通过三大创新点解决多目标跟踪中的卡尔曼滤波顽疾。OC-SORT引入在线平滑虚拟轨迹技术(OOS)、观测中心动量匹配机制(OCM)和基于最后观测的轨迹恢复(OCR),显著提升了遮挡场景下的跟踪性能。实验数据显示,相比传统SORT算法,OC-SORT在MOT17数据集上MOTA提升5.7%,遮挡恢复成功率提高64.2%,为Multi-Object Tracking领域带来突破性进展。

weixin_42547431的博客 238

Hugging Face 最新开源 SmolVLA 小模型入门教程(一)

今天,我们介绍SmolVLA,这是一个紧凑型(450M)、开源的视觉-语言-动作模型,专为机器人设计,可在消费级硬件上运行。 仅在带有lerobot标签的开源社区共享数据集上进行预训练。 SmolVLA-450M在模拟环境(LIBERO、Meta-World)和真实世界任务(SO100、SO101)中,表现优于规模更大的VLA模型及强基线模型如ACT。 支持异步推理,响应速度提升30%,任务吞吐量提升2倍。

2506_90492529的博客 4078

硬核的 Python 面试题!Python经典面试题总结

一、50 道重要的 Python 面试题【问答题+编程题】 1. 说说你用过Python标准库中的哪些模块。 2. `init__`和`__new`方法有什么区别? 3. 平常工作中用什么工具进行静态代码分析。 4. 函数参数`arg`和`*kwargs`分别代表什么? 5. 什么是鸭子类型(duck typing)? 6. 说一下Python中变量的作用域。 8. 说一下Python 2和Python 3的区别。 9. 解释一下线程池的工作原理。 10. 举例说明什么情况下会出现`KeyError`、`T

weixin_43474701的博客 4907

EMC意义下的共模(Common Mode)和差模(Differential Mode)

在电子产品中,信号或电源通过两根导线传输。对比维度差模(DM)共模(CM)电流方向一进一出,相等相反同向、相等回流路径两根导线组成的闭合回路地或外壳EMC影响较小容易辐射干扰,重点治理类型定义有用信号干扰信号抑制方法常规滤波器、电感、电容共模电感、磁环、屏蔽、接地技术等。

weixin_43199439的博客 1244

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

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

测试小小小的博客 261

图神经网络实战(8)——图注意力网络(Graph Attention Networks, GAT)

图注意力网络 (Graph Attention Networks, GAT) 是对图卷积网络 (Graph Convolutional Network, GCN) 的改进,提出了一种通过自注意力 (self-attention) 过程计算的加权因子,而不是使用静态的归一化系数。在本节中,我们介绍了 GAT 架构。通过从线性变换到多头注意力的四个主要步骤,了解了 GAT 的工作原理,并在 NumPy 中从零开始构建了 GAT 层。最后,将 GAT 模型应用于 Cora 和 CiteSeer 数据集。

盼小辉丶的博客 1万+

FPGA发展趋势:异构计算、AI加速、可重构计算

FPGA技术正朝着异构计算、AI加速和可重构计算三大方向发展。作为高效能计算平台,FPGA在异构架构中与CPU/GPU协同工作,发挥低延迟、高能效优势;在AI领域通过定制化架构实现边缘推理加速;其硬件可重构特性支持动态适应多样化计算需求。最新进展包括部分可重构技术、智能网卡和边缘AI应用。未来,FPGA将在自适应计算、量子接口和软件定义硬件等领域持续突破,成为异构计算架构的核心组件,推动硬件与软件的深度融合。性能对比显示FPGA在能效比(5-20TOPS/W)和灵活性方面具有显著优势。

2301_79143213的博客 967

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

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

测试小小小的博客 320

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

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

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

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

YJT1002的博客 884

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

测试小小小的博客 380

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

软件测试升职加薪必看系列:自动化测试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进阶4 自定义序列类型 序列类型的分类 按照序列存储数据的类型 容器序列:list, tuple, deque 扁平序列:str, bytes, array.array, bytearray 按照序列是否可变 可变序列:list, deque, array.array, bytearray 不可变序列:str, tuple, bytes 序列的abc继承关系 引言 collections.abc模块中有很多内置的抽象基类 序列主要和两个抽象基类有关:Sequence和..

测试小小小的博客 354

软件测试升职加薪必看系列:自动化测试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进阶(三)
测试小小小
博客等级 码龄6年 265粉丝 364原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值