3 Python学习记录-流程控制

1 条件判断的注意事项

# 写法1
if user.login == True
# 写法二
if user.login:

写法二有时候比较推荐,代码简单了。但是这种简洁有时候也会使得判断范围变宽。因为user.login 为真的条件不一定是等于True,如果user.login是一个非0数字也可以为真判断。

所以写法二推荐的条件是返回的类型比较明确,例如True/False,或者是返回的只能是0或者非0等。

布尔为False的判断: None, 0,[], (),  {} , set(), frozenset() 等等。

布尔值为True的判断:非0数,非空序列、元组、字典,用户定义的类和实例。

# 否定的逻辑尽量少写。便于理解。 
if not number < 10:
if not result is None:
if not index == 1   

# 优化
if number >= 10:
if result is not None:
if index != 1:

这种写法好像就是要表达 “正在醒着的人”,不好好说话,非要说: "不是正在睡觉的人"。每次读代码都要反向一下,而且这种写法还会有多层嵌套,读起来会非常的让人难受。

逻辑优化: not A  or  not  B  应该优化为: not (A and B)

and的优先级高于or: 看看结果吧?

print((True or False) and False)  # False
print(True or False and False) # True

2 与None进行比较时用is运算符

判断两个对象是否相等,一般是用 == 运算符, 如果是自定义对象,== 运算符可以被 __eq__() 方法魔改“:

class EqualObj:

    def __eq__(self, other):
        # other 代表等号右边的对象,X==y,会调用x的 __eq__方法
        return True


obj = EqualObj()
print(obj == "hello")
# 输出
True

 == 行为可以被改变,如何严格检查某个对象是是否是None? 

使用is运算符, ==  比较两个对象是否相等,可以被重载方法改变, is 是判断两个对象是否是内存里面的的同一个东西,无法被重载。 x is y 实际上 id(x) 和 id(y) 的结果是是否相等,是否为同一个对象。所以当判断某个对象是否是None时,应该要用is运算符。

print(obj == None)
print(obj is None)
# 输出
True
False

虽然is比较比较严格,但是并不是所有的比较都适合用is来比较? 只有时单例的对象才可以这样通过is比较,在Python中,除了None, True , False 这三个对象,其他对象并不是严格的单例模式存在的,在内存中仍然是完全不同的两个实例,所以其他对象比较使用 == 。 

3 all()和any() 函数构建条件表达式

all(iterable) :当 iterable中所有成员的布尔值都为True,就返回True,否则返回False

any(iterable) :当 iterable中的任何一个成员返回True,就返回True,否则返回False4

4 代码优化案例

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值