and...or引发的深思

python中是没有三目的,一般但是有替代的方法

print('True' if True else 'False')


不过接受程度更高的应该是

print(True and 'True' or 'False')

但是这两个关键词并不是必须要联合使用的

print(True and 'True')

这就颠倒实现了类似Ruby中的if用法

puts 'True' if true

这种相当于if的半句用法,在很多场景下可以极大的简化代码

def isPerson(obj):
    return obj.__class__ is Person and True
    return False

但是,作为逻辑操作符,它的返回值却保留了原本的对象,没有转换成Boolean

print(1 and 5 and 3)

其实多次验证可以发现 and 和 or 的一些特点

1.顺序执行:两种都属于双目运算符,同时,结合规律也是从左到右依次执行的

2. 保留对象:经过这两种符号进行的逻辑判断,并没有转换成布尔值,而是保留了对象原来的属性

3. 条件查找:and查找真值为False的对象时中断查找,or查找到真值为True的对象时中断查找,返回的都是查找结束的前一个对象

4.连接特性:能够将两部分的操作语句连接起来,不用添加多余的修饰

所以我们一般用的类三目运算,可以这样理解

result = a and b or c

1. a的真值为False:and 操作符查找到真值为False的对象直接结束 and 操作,进入or操作,不论c真值如何,c都是连接语句查找的最后对象,必定返回c

2. a的真值为True:and 连接符查找真值为 False 的对象,因此继续查找b

3. b的真值为False:如果是False就会中断查找,进入or操作,or马上查找到真值,中断操作,直接返回b

4. b的真值为True:and未找到真值,进入or操作,不论c的真值如何,最后一个查找到的都是c,必定返回对象c

连接符使用过程中,遵循以上四点规律,从左到右的结合,自身的查找和中断,然后返回的依旧是原本的对象

然后我想起了not

print(not 1)

这个操作会进行对象的强转成布尔类型的操作,并进行反转,这个操作返回的对象必定是布尔值

同样的,if操作也会有这样的隐含功效

if obj:
    pass

在判断进行的时候,都会进行对象转换布尔的操作

 if 会直接利用了返回布尔值,不改变原来的对象属性,not 只进行变换转换布尔值,本身却不会直接利用,两者转换方式相反

然后我继续考量了 in ,和 可以连用的 for...in 操作

a = print(1) in (print(2),print(3),print(4))

发现在没有进行打印操作的时候,依旧打印出了数字

同样,for...in 也有这个现象

for value in (print(1),print(2),print(3)):
    pass

同样的打印了数字,于是我多加了一个步骤

for value in (print(1),print(2),print(3)):
    print(value)

这次多打印了三个None

实验证明

1. 在for语句准备执行的时候,元组当中的语句已经执行了

2. 执行for语句时,元组中取出来的的是经过运行后的结果对象

结合之前总结的 and 和 or 的特性,我们可以发现,在真正进入操作的时候,方法传入或是存储的东西,都必定是一个对象

也就是说

1. 在利用and 和 or 操作的时候,我们条件的真值是已经执行过条件判断之后返回的对象

2. 在存入元组当中时,我们的语句也已经得到了执行,存储的是语句执行之后的对象

总结起来,就是说进行操作的必定是对象,不是对象会将语句执行完毕然后获取执行返回值,无返回值返回None

所以:

1. 对象是python程序中的方法执行的开端,也是结束

2. 操作语句只能够存在于过程当中,没成为对象之前,不能够进行传参,返回和存储

在语句没有编译成对象的情况下,唯一能够执行操作的就是方法,或者成为方法对象了

而且操作语句编译也显得繁复,所以这才是方法对象繁荣发张以至于无处不在,功用无线的根本原因吧


注:for和in中间的那个,只能定义成变量,语句定义的话会出错

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值