Python-__repr__、__hash__和__eq__方法,split()、join()、yield()和append()函数
1.__repr__方法
程序1
class Python:passa = Python()
print(a)
print(a.__repr__())结果
<__main__.Python object at 0x0000023B82185FD0>
<__main__.Python object at 0x0000023B82185FD0>默认情况下,我们得到的信息只会是“类名+object at+内存地址”
程序2
class Python:def __init__(self):self.name = "我喜欢你"self.add = "https://www.baidu.com"def __repr__(self):return "Python[name=" + self.name + ",add =" + self.add + "]"a = Python()print(a) 结果
Python[name=我喜欢你,add =https://www.baidu.com]通过重写类的 __repr__() 方法可以自定义输出实例化对象时的信息,当输出某个实例化对象时,其调用的就是该对象的 __repr__() 方法,输出的是该方法的返回值。
程序1中执行 print(a) 等同于执行 print(a.__repr__()),程序的输出结果是一样的(输出的内存地址可能不同)。
和 __init__(self) 的性质一样,python 中的每个类都包含 __repr__() 方法,因为 object 类包含__reper__() 方法,而 Python 中所有的类都直接或间接继承自 object 类。
__repr__() 方法是类的实例化对象用来做“自我介绍”的方法,默认情况下,它会返回当前对象的“类名+object at+内存地址”,而如果对该方法进行重写,可以为其制作自定义的自我描述信息,如程序2
2.__hash__函数和__eq__函数
可哈希的集合(hashed collections),需要集合的元素实现了__eq__和__hash__,而这两个方法可以作一个形象的比喻:哈希集合就是很多个桶,但每个桶里面只能放一个球。
__hash__函数的作用就是找到桶的位置,到底是几号桶。
__eq__函数的作用就是当桶里面已经有一个球了,但又来了一个球,它声称它也应该装进这个桶里面(__hash__函数给它说了桶的位置),双方僵持不下,那就得用__eq__函数来判断这两个球是不是相等的(equal),如果是判断是相等的,那么后来那个球就不应该放进桶里,哈希集合维持现状。
程序
class Python:def __init__(self, item):self.item = itemdef __eq__(self, other):print('使用了equal函数的对象的id',id(self))if isinstance(other, self.__class__):return self.__dict__ == other.__dict__else:return Falsedef __hash__(self):print('f'+str(self.item)+'使用了hash函数')return hash(self.item)f1 = Python(1)
f2 = Python(2)
f3 = Python(3)
f_set = set([f1, f2, f3])
print(f_set)
print()
f = Python(3)
f_set.add(f)
print('f3的id:', id(f3))
print('f的id:', id(f))结果
f1使用了hash函数
f2使用了hash函数
f3使用了hash函数
{<__main__.Python object at 0x000001E6F4271CA0>, <__main__.Python object at 0x000001E6F4271C40>, <__main__.Python object at 0x000001E6F4271B50>}f3使用了hash函数
使用了equal函数的对象的id 2091450309456
f3的id: 2091450309456
f的id: 20914503092643.split函数
split()函数
语法:str.split(str="",num=string.count(str))[n]
参数说明:
str:表示为分隔符,默认为空格,但是不能为空(’’)。若字符串中没有分隔符,则把整个字符串作为列表的一个元素
num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
[n]:表示选取第n个分片
注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略
程序
string = "abcade \nf.ghi.gk \nlmn"print(string.split()) # 以空格为分隔符,包含 \n
print(string.split(' ', 1)) # 以空格为分隔符,分隔成两个print(string.split("a", 1)) # 以 a 为分割符,指定第二个参数为 1,返回两个参数列表
结果
['abcade', 'f.ghi.gk', 'lmn']
['abcade', '\nf.ghi.gk \nlmn']
['', 'bcade \nf.ghi.gk \nlmn']4.join函数
join()是一个字符串方法,它返回与iterable元素连接在一起的字符串。
join()方法提供了一种灵活的方式来连接字符串。它将可迭代的每个元素(如列表,字符串和元组)连接到字符串,并返回连接后的字符串。
join()的语法为:
string.join(iterable)join()参数
join()方法采用一个可迭代的对象-能够一次返回其成员的对象
可迭代的一些示例是:
原生数据类型 - 列表,元组,字符串,字典和集合
join()返回值
join()方法返回一个与iterable元素串联的字符串。
如果Iterable包含任何非字符串值,则将引发TypeError异常。
join()函数如何用于列表和元组
程序
numList = ['1', '2', '3', '4']
seperator = ', '
print(seperator.join(numList))numTuple = ('1', '2', '3', '4')
print(seperator.join(numTuple))s1 = 'abc'
s2 = '123'""" s2的每个字符都连接到s1的前面"""
print('s1.join(s2):', s1.join(s2))""" s1的每个字符都连接到s2的前面"""
print('s2.join(s1):', s2.join(s1))结果
1, 2, 3, 4
1, 2, 3, 4
s1.join(s2): 1abc2abc3
s2.join(s1): a123b123cjoin()函数如何用于集合
程序
test = {'2', '1', '3'}
s = ', '
print(s.join(test))test = {'Python', 'Java', 'Ruby'}
s = '->->'
print(s.join(test))结果
2, 1, 3
Ruby->->Java->->Python注意: 集合是项目的无序集合,您可能会获得不同的输出。
join()函数如何用于字典
程序
test = {'mat': 1, 'that': 2}
s = '->'
print(s.join(test))test = {1:'mat', 2:'that'}
s = ', '# 这抛出了错误
print(s.join(test))结果
mat->that
Traceback (most recent call last):File "...", line 36, in <module>print(s.join(test))
TypeError: sequence item 0: expected str instance, int foundjoin()方法尝试将字典的键(而非值)连接到字符串。如果字符串的键不是字符串,则会引发TypeError异常。
5.yield函数
return:在函数中返回某个值,然后函数结束运行。一般没有返回值类型,就不用写return
yield:带yield的函数是一个迭代器,在函数内部碰到yield 的时候,函数会返回某个值,并停留在这个位置,当下次执行函数后,会在上次停留的位置继续运行。
yield首先是个return,在程序中返回某个值,返回之后程序就不再往下运行了。看做return之后再把它看做一个是生成器(generator)的一部分(带yield的函数才是真正的迭代器)
程序1
def foo():print("starting...")while True:res = yield 4print("res:", res)g = foo()
print(next(g))
print("*"*20)
print(next(g))对代码进行单步调试
程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象)
直到调用next方法,foo函数正式开始执行,先执行foo函数中的print方法,然后进入while循环
程序遇到yield关键字,然后把yield想想成return,return了一个4之后,程序停止,并没有执行赋值给res操作,此时next(g)语句执行完成,所以输出的前两行(第一个是while上面的print的结果,第二个是return出的结果)是执行print(next(g))的结果
程序执行print("*"*20),输出20个*
又开始执行下面的print(next(g)),但这个是从刚才那个next程序停止的地方开始执行的,也就是要执行res的赋值操作,这时候要注意,这个时候赋值操作的右边是没有值的(因为刚才那个是return出去了,并没有给赋值操作的左边传参数),所以这个时候res赋值是None,所以接着下面的输出就是res:None
程序会继续在while里执行,又一次碰到yield,这个时候同样return 出4,然后程序停止,print函数输出的4就是这次return出的4.
原文链接:https://blog.csdn.net/mieleizhi0522/article/details/82142856
结果1
starting...
4
********************
res: None
4程序2
def foo():print("starting...")while True:res = yield 4print("res:", res)g = foo()
print(next(g))
print("*"*20)
print(g.send(7))send函数:send是发送一个参数给res的,程序1中return的时候,并没有把4赋值给res,下次执行的时候只好继续执行赋值操作,只好赋值为None了,而如果用send的话,开始执行的时候,先接着上一次(return 4之后)执行,先把7赋值给了res,然后执行next的作用,遇见下一回的yield,return出结果后结束。
前两个print()的输出和程序1完全一致,重点讲解最后一个print()
程序执行g.send(7),程序会从yield关键字那一行继续向下运行,send会把7这个值赋值给res变量
由于send方法中包含next()方法,所以程序会继续向下运行执行print方法,然后再次进入while循环
程序执行再次遇到yield关键字,yield会返回后面的值后,程序再次暂停,直到再次调用next方法或send方法
结果2
starting...
4
********************
res: 7
46.append函数
append() 方法向列表末尾追加元素
程序
fruits = ['apple', 'banana', 'cherry']fruits.append("orange")
print(fruits)结果
['apple', 'banana', 'cherry', 'orange']程序
向列表添加一个列表
a = ["apple", "banana", "cherry"]
b = ["Porsche", "BMW", "Volvo"]
a.append(b)print(a)结果
['apple', 'banana', 'cherry', ['Porsche', 'BMW', 'Volvo']]
相关文章:
Python-__repr__、__hash__和__eq__方法,split()、join()、yield()和append()函数
1.__repr__方法程序1class Python:passa Python() print(a) print(a.__repr__())结果<__main__.Python object at 0x0000023B82185FD0> <__main__.Python object at 0x0000023B82185FD0>默认情况下,我们得到的信息只会是“类名object at内存地址”程序…...
【安卓开发】安卓广播机制
读书笔记系列(第一行代码) 5.1 广播机制简介 标准广播:完全异步执行,广播发出后,所有广播接收器几乎都同一时刻收到这条广播(无法被截断)有序广播:同步执行,广播发出后…...
移动WEB开发四、rem布局
零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…...
request.getURL()和request.getURI() 以及通过request获得路径相关大全
request.getURL()和request.getURI() 如果我的请求是:http://localhost:8080/ServletTest/servlet/Hello request.getRequestURI() 返回值类似:/ServletTest/servlet/Hello request.getRequestURL() 返回值类似:http://localhost:8080/Servle…...
java网络编程-nio学习:阻塞和非阻塞
一、阻塞 阻塞模式下,相关方法都会导致线程暂停 ServerSocketChannel.accept 会在没有连接建立时让线程暂停 SocketChannel.read 会在没有数据可读时让线程暂停 阻塞的表现其实就是线程暂停了,暂停期间不会占用 cpu,但线程相当于闲置 单线…...
JVM-JMM内存模型(happens-before、volatile)
前言 由于计算机的存储设备与处理器的运算速度有几个数量级的差距所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲。 将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算…...
算法leetcode|37. 解数独(rust重拳出击)
文章目录37. 解数独:样例 1:提示:分析:题解:rustgoccpythonjava37. 解数独: 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现…...
SpringBoot整合Dubbo
目录1、dubbo简介2、dubbo解决了什么问题3、环境准备4、项目搭建5、总结springboot整合feign可参考我另外一篇文章SpringBoot集成Feign 1、dubbo简介 Apache Dubbo 最初在 2008 年由 Alibaba 捐献开源,很快成为了国内开源服务框架选型的事实标准框架 ,…...
[软件工程导论(第六版)]第9章 面向对象方法学引论(课后习题详解)
文章目录1. 什么是面向对象方法学?它有哪些优点?2. 什么是“对象”?它与传统的数据有何异同?3. 什么是“类”?4. 什么是“继承”?5. 什么是模型?开发软件为何要建模?6. 什么是对象模…...
光学分辨率光声显微镜中基于深度学习的运动校正算法
在这项研究中,我们提出了一种基于深度学习的方法来校正光学分辨率光声显微镜 (OR-PAM) 中的运动伪影。该方法是一种卷积神经网络,它从具有运动伪影的输入原始数据建立端到端映射,以输出校正后的图像。首先,我们进行了仿真研究&…...
浅谈UG二次开发中使用的FindObject
一般我们在业务逻辑里想查找一个Object的时候,会调用FindObject、GetObject、NxObjectManager.Get,不管是上述哪种实现,都是在内存中找东西,找到了就返回对象,否则返回null,但不会触发加载。 这里我分别从建…...
贪心原理及刷题
更新中 概念 使用贪心需要满足,上一步的局部最优解能推出这一步的局部最优解,直到得到全局最优解 而dp这一步的局部最优,不一定来源上一步的局部最优,而可能与更早的解有关,同时dp转移方程的推导也比较复杂 122. 买卖股票的最佳时机 II - 力扣(LeetCode) 这道题是典…...
2023赏金计划:Coremail SRC漏洞征集与样本奖励火热进行中
赏金活动一:Coremail SRC漏洞奖励计划 01 活动背景 2023年1月,Coremail安全应急响应中心(Coremail SRC)正式上线启用,面向公众收集安全漏洞信息与安全情报。Coremail SRC旨在联合众多安全专家、白帽子研究员共同发现…...
简记:清理指定后缀名文件的 powerhsell 小脚本
清理指定后缀名文件的 powerhsell 小脚本jcLee95:https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/129121074 1.介绍 相关工具代码 2.目…...
问题记录:mac系统偏好设置不展示mysql
Mac新系统升级(10.14.5)后未从appstore下载的软件在安装时会提示安装包已损坏之类的东东,这是因为没有打开“设置”—“安全与隐私”中的“任何来源”造成的,可是升级后的10.14.5却没有这个选项。 那么macOS 10.14.5以上允许任何…...
网络计划--时间参数的计算和优化
根据网络图的基本概念和原则绘制出网络图之后,我们可以计算网络图中有关的时间参数,主要目的是找出关键路线,为网络计划的优化、调整和执行提供明确的时间概念。如下图中从始点①到终点⑧共有4条路线,可以分别计算出每条路线所需的…...
1.2.7存储结构-磁盘管理:磁盘移臂调度算法、先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描算法(SCAN)、循环扫描(CSCAN)
1.2.7存储结构-磁盘管理:磁盘移臂调度算法、先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描算法(SCAN)、循环扫描(CSCAN)先来先服务(FCFS)最短寻…...
2022年AI顶级论文 —生成模型之年(上)
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 过去十年来,人工智能技术在持续提高和飞速发展,并不断冲击着人类的认知。 2012年,在ImageNet图像识别挑战赛中,一种神经网络模型(AlexNet&…...
Linux下程序调试的方法【GDB】GDB相关命令和基础操作(命令收藏)
目录 1、编译 2、启动gdb调试 2.1 直接运行 2.2 运行gdb后使用run命令 2.3 调试已运行的程序 3、图形界面提示 4、调试命令 1、查看源码 2、运⾏程序/查看运⾏信息 3、设置断点 5、单步/跳步执⾏ 6、分割窗口 7、其他命令 8、相关参数 1、编译 在编译时要加上-g选…...
使用frp配置内网机器访问
frp简介 frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。frp 项目官网是 https://github.com/fatedier/frp,软件下载地址为https://github.com/fatedier/frp/releases frp工作原理 服务端运行…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
