测开不得不会的python条件判断语句if
学习目录
1. 条件语句结构
2. 布尔值的判断
3. not 表达式表示相反逻辑
4. == 和is判断的区别
5. 三元表达式(三元运算)
6. 使用all() 和any()函数进行条件判断
7. 使用and 和or判断
8. if __name__ == '__main__'的含义
python的条件语句是指当表达式判断为True(bool值)时执行代码块。
条件语句结构
if 表达式: #表达式为True时 执行代码块1
代码块1
elif 表达式: #表达式为True时 执行代码块2
代码块2
elif 表达式: #表达式为True时 执行代码块3
代码块3
....支持多个elif表达式
else: #以上表达式都为False时 执行代码块n
代码块n
以上结构中elif和else条件语句为非必须。
布尔值的判断
条件表达式判断的是布尔值为True或者False,可以使用函数bool()判断对象的布尔值。
#数字0的布尔值
print(bool(0))
#打印结果
False
#数字1的布尔值
print(bool(1))
#打印结果
True
一些内置对象的布尔值说明:
- 布尔值为False: 数字0,None,False,空列表[],空字典{},空集合set(),空元组()
- 布尔值为True: 非数字0,True,非空列表,非空字典,非空集合set(),非空元组(),自定义的类和实例
自定义的类和实例的布尔值为True:
class Fruit():
def __init__(self,name,color):
self.name = name
self.color = color
fruit = Fruit('apple','red')
print(f'自定义的class 布尔值为{bool(Fruit)}')
print(f'自定义的实例 布尔值为{bool(fruit)}')
#打印结果
自定义的class 布尔值为True
自定义的实例 布尔值为True
not 表达式表示相反逻辑
举例:当表达式为False时,使用not+表达式,if条件判断为True,会执行代码块1
if not 表达式:
代码块1
== 和is判断的区别
== 判断的是两个对象的值是否相等,而is判断的是对象的内存地址是否一致。
举例:变量A和B都为一个空列表
A = []
B = []
#使用==判断
if A == B:
print('A等于B')
#打印结果为True 表示A和B的值一致
True
#使用is判断
print(f'A的内存地址 {id(A)}')
print(f'B的内存地址 {id(B)}')
if A is B:
print('A和B的内存地址是同一个')
else:
print('A和B的内存地址不是同一个')
#执行结果如下 表示A和B的内存地址不是同一个 表达式为False
A的内存地址 4509789696
B的内存地址 4509759936
三元表达式(三元运算)
是一个简化的条件表达式,结构如下:expression为True时执行代码块1,否则执行代码块2
[代码块1] if [expression] else [代码块2]
A = 15
B = 15
if A == B:
C=A+B
else:
C=A-B
以上条件语句可以简化为:
C = A+B if A==B else A-B
使用all() 和any()函数进行条件判断
all() 函数的语法 :all(iterable) 参数为可迭代对象
- 对于迭代对象的的所有值,如果 bool()的结果都为 True,则返回 True,如果可迭代对象为空,返回 False
any() 函数的语法 :any(iterable) 参数为可迭代对象
- 对于迭代对象的的所有值,如果 bool()的结果任意一个为 True,则返回 True,如果可迭代对象为空,返回 False
举例:列表A有四个数字,判断列表的数字是否被2整除,只有数字2和4被2整除(列表表达式请学习python列表介绍)
listA = [1,2,3,4]
#通过前面文章提到的列表表达式 生成新列表传入all和any函数
print(f'执行all()函数的结果: {all([i%2 ==0 for i in listA])}')
print(f'执行any()函数的结果: {any([i%2 ==0 for i in listA])}')
#结果如下
执行all()函数的结果: False
执行any()函数的结果: True
使用and 和or判断
有两个表达式A和B
A和B都为True时 A and B 结果为True
A和B有一个为False时 A and B 结果为False
A和B有一个为True时 A or B 结果为True
A和B都为False时 A or B 结果为False
A = True
B= False
if A and B:
print(f'A和B都为True时 A and B 结果为True')
else:
print(f'A和B有一个为False时 A and B 结果为False')
#打印结果:
A和B有一个为False时 A and B 结果为False
if A or B:
print(f'A和B有一个为True时 A or B 结果为True')
else:
print(f'A和B都为False时 A or B 结果为False')
#打印结果
A和B有一个为True时 A or B 结果为True
if __name__ == '__main__'的含义
python模块(单个的.py文件是一个模块)中使用if __name__ == '__main__'时,指只有直接运行该py文件时if判断才会生效,而当该模块被其他模块import导入时则不会生效。
定一个test.py文件,文件内容如下:
print(f'test.py的属性__name__值为: {__name__}')
if __name__ == '__main__':
print('执行该内容')
#运行test.py 结果: if __name__ == '__main__'判断为True
test.py的属性__name__值为: __main__
执行该内容
当test.py同级目录的另一个文件test1.py通过import导入test.py时:
test1.py文件内容如下:
import test
#运行test1.py的结果:
test.py的属性__name__值为: test
解释:if __name__ == '__main__'判断为False,
因为__name__值变成了文件名test,而不再是__main__
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。