2019/11/18 03-bool和可视化

在这里插入图片描述
创建销毁,hash,dir,__dir__和内建函数的dir,不同的地方在,表现不同,参数也不同,所有的hash原理都是一致的,到了面向对象,就变成了,任意一个对象能否hash(因为object实现了,那么任意的对象是可以hash的)
如果要重构实例的hash方法,就只能返回整数,这个函数叫可hash,什么时候用hash,目前用的最多的就是set和字典,这两个地方还有个功能叫去重,hash是hash,去重是去重,可以hash代表你是作为key的,是可以hash的,去重就代表是否相等,(两种,is,==,is代表是同一个东西,==代表内容相同)
所有的hash都是把这个东西计算出一个值,这个叫做门牌号码,以后数据放在对应门牌号码里空间中,下一次找数据直接找门牌号即可,它们的时间复杂度是O(1)的
但是去重不去重,代表不是hash来解决的(会存在hash冲突,多个数据在一个房间里的)

bool

两个对象可以当true来理解
在这里插入图片描述
if相当于等价外面套一个bool函数()
在这里插入图片描述
没有看到bool在这里插入图片描述在这里插入图片描述
是对实例的,对B无效在这里插入图片描述
试试B的实例
在这里插入图片描述
一种是实例,一种是类,都当做是真
在这里插入图片描述
对于类来讲是真的,但是pass是针对实例的,执行试试在这里插入图片描述
提示需要返回的是布尔,但是你return的是none在这里插入图片描述
这样写是不会递归的,自己调用自己才是递归,但是现在求的是1在这里插入图片描述在这里插入图片描述

不能写成这样,这样就自己调用自己了,递归了
在这里插入图片描述
这个布尔值是true还是false决定论后面的实例等效什么在这里插入图片描述
再来看下实例,为空等于0,也是等效flase,跟长度有关__len__在这里插入图片描述
没有布尔值可能就跟长度有关
在这里插入图片描述
现在提供的是长度
在这里插入图片描述
布尔值一定要返回true或者false,如果没有提供布尔值,就看长度的话,就跟容器是等效的了,字符串是不可变字符序列,相当于是字符的容器,空串为何等效false,相当于字符是空的,长度为0
在这里插入图片描述
没有哪个容器是-1的,只能是>=0,正整数
在这里插入图片描述
浮点型也不行
在这里插入图片描述
直接写true也是可以的,布尔型是整形的子类,是特殊的整型在这里插入图片描述
这两个方法可以一起写,对类没有影响,但是对实例来讲,到底是true还是false在这里插入图片描述
是false,因为需要先看看有没有__bool__函数,如果有先看看return什么值,没必要再去看长度,所以
有长度,有布尔,优先使用布尔
在这里插入图片描述
如果布尔和长度都没有,就都认为是真
一个实例,不管是类的实例还是类对象都是可以作为等价布尔的
在这里插入图片描述
问的是函数对象是什么。没有调用,就是true
在这里插入图片描述
大多数定义的类跟A一样,不会定义__bool__,也不会定义__len__这样的东西
在这里插入图片描述
这东西只对实例有效,因为传的是self在这里插入图片描述
如果没有,就看看有没有__len__,如果len是0,是等效false,大于0,等效true,如果两个都有,就看看布尔等于什么在这里插入图片描述在这里插入图片描述
如果在if后面,或者while true后面,这个对象,就看等价的时候,相当于在求布尔在这里插入图片描述
这两个指的是一种字符串的表达形式
在这里插入图片描述
这是一种字节序列的表达形式
在这里插入图片描述在这里插入图片描述在这里插入图片描述
现在恢复注释的,看下会调用哪个
在这里插入图片描述
准备这样,调用的还是__str__
在这里插入图片描述
现在这么做,创建一个实例交给str
在这里插入图片描述
使用内建函数repr
在这里插入图片描述
看见引号就肯定认为是字符串,字符串不作数,不能看我们输出的字符串就判断它是什么类型,是根本就判断不出来的
在这里插入图片描述
这两个方法都给的情况下,A(‘tom’)相当于隐含调用string,下面的str(A(‘tom’))明摆调用string
在print的时候如果不写str,相当于把str里面的每一个非字符串元素强行调用了一次str,就等于求它的字符串表达式
format函数会对里面的这些参数会直接找string
这三种形式都是找string的

在这里插入图片描述
print函数默认是string,str函数转str,print函数没必要继续转str
print函数,会对后面的实例函数,使用str函数,直接使用str函数也找他,使用format函数找的也是他
三个都找他

在这里插入图片描述
下面写一个实例看一下
在这里插入图片描述
print函数没有直接作用在a上,是在列表上面,所以打印的结果就变了在这里插入图片描述
在这里插入图片描述
str没有直接作用在a上,然后{}set集合去重了

再改变一下
在这里插入图片描述
在前面加个 ,首先解构先算,format直接作用在a上面了,去重,最后剩下一个实参,打印str*
在这里插入图片描述
前面正则表达式做的matcher,matcher匹配到固定的长度就不再增加了
相当于format后面写界限,固定字符串表达

在这里插入图片描述在这里插入图片描述
t就不能代表长度在这里插入图片描述
什么时候调用str,当这个实例直接被print,或者直接作为print参数,str参数,format函数参数,这时候会直接去调用__str__,如果并不直接被打印函数调用,最终还是要输出的,间接调用都会选择repr,一般来说间接使用repr的多一点

拿掉str,下面打印是否会出问题,全是repr
在这里插入图片描述
总结:如果提供了__repr__和__str__,print,str,format这三个函数会直接作用在__str__,如果现在这个str函数不提供了,就包括print,str,format这三个函数都会找repr

把repr去掉会如何,该找string找string,该找repr找repr,找repr就找到后面的object上去了,object只能把你的类型和内存地址打印出来,想打印的漂亮点就做不到
在这里插入图片描述

**如果str提供了,但是repr没提供,那print,str,format三个函数依然去找str,找str,如果不是作用在上面,就还是找repr,repr没有,但是一切继承都是自object,所以去找object,object好歹有一种表现形式,把这个表现形式都打印
**
没有str找repr,repr也没有就找object上,通过 mro找到,现在打印出来就全是类型和内存地址
在这里插入图片描述
这个不过是一种字符串的表达原理,给人看的,最终需要一个输出格式,格式化数据表达格式,来给人看在这里插入图片描述
还有一个__bytes__
在这里插入图片描述
print(a)直接的是调用str,如果是print([a])调用的是repr
在这里插入图片描述
使用bytes相当于转换当前实例在这里插入图片描述
注释调,相当于转换的时候,作为object,A转换不了bytes在这里插入图片描述
这样就不报错了,任意情况可以转bytes,这个方法要求你提供的是bytes类型在这里插入图片描述
但是真正传数据肯定是好好传递的,这是把自己的数据转换成bytes
在这里插入图片描述
jason转为文本,文本转换为bytes
现在是str

在这里插入图片描述
再转换成bytes
在这里插入图片描述
打印出来的不作数的,是不知道原来类型是什么的在这里插入图片描述
打印出来什么类型是看不出来的,需要试试
在这里插入图片描述
一般再括号里是会带引号的,原始数据什么类型,输出格式不一定能表达出来在这里插入图片描述
json在讲铁路图的是有哪几种数据类型,数值,字符串,(对象和数字,对应的类型只有字典
用字典,代表字典是可以转的

在这里插入图片描述
直接放self就绝对不支持在这里插入图片描述
这种称为可视化,以某种形式表达出来,repr是明摆着要调用的,如果不用repr内建函数,就要看外部作用函数是谁,如果作用函数是string,format,print就会直接去调用__str__,除此之外,就会调用__repr__,如果没写repr,就会调用object的repr,如果string没写,定义了repr,就会使用repr,如果repr和str都没写,就问str要repr在这里插入图片描述
是一个字节序列的表达形式,如果要转二进制,要么pickle,msgpack,要么json转换成bytes对象
在这里插入图片描述在这里插入图片描述在这里插入图片描述
判断类型记得isinstance,不要靠字符串输出来判断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值