谈谈Python中的if

https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#if python语言参考手册->8. 复合语句

if 子句

  • if是大多数语言中用来做条件判断的关键词

  • 表达式比较简单

     if 条件表达式:
         为真做的事情
     else:
         为假做的事情
    
  • 官方

     if_stmt ::=  "if" assignment_expression ":" suite
                  ("elif" assignment_expression ":" suite)*
                  ["else" ":" suite]
                     
     它通过对表达式逐个求值直至找到一个真值(请参阅 布尔运算 了解真值与假值的定义)在子句体中选择唯一匹配的一个;然后执行该子句体(而且 if 语句的其他部分不会被执行或求值)。 如果所有表达式均为假值,则如果 else 子句体如果存在就会被执行
    
  • 这里涉及表达式为真这个概念

  • 简单来说

     age = 18
     if age>=18:
         print('你是成年人,请进')
     else:
         print('你是未成年,请回家!')
    
  • emmmmm,这应该谁都会;稍微进阶一点呢,就是此处的表达式的多样性,涉及布尔运算。

布尔运算

https://docs.python.org/zh-cn/3.9/reference/expressions.html#booleans 6.11 布尔运算

  • 官方说明

     在执行布尔运算的情况下,或是当表达式被用于流程控制语句时,以下值会被解析为假值: False, None, 所有类型的数字零,以及空字符串和空容器(包括字符串、元组、列表、字典、集合与冻结集合)。 所有其他值都会被解析为真值。 用户自定义对象可通过提供 __bool__() 方法来定制其逻辑值
    
  • 归纳一下:

    • 假:False, None, 所有类型的数字零,以及空字符串和空容器(包括字符串、元组、列表、字典、集合与冻结集合)
    • 非假即真

简单示例

 if 0 or False or None or '' or [] or () or {} or set() or frozenset():
     print('上面都是假的,你看不到这句话打印')
 else:
     print('...')   # 最终输出这个
 if True and 1 and 2 and 'a' and ['a'] and (1,) and {'name':'wuxianfeng'} and {'a','b'}:
     print('上面都是真的')    # 会打印

那对象呢?

bool 魔术方法

https://docs.python.org/zh-cn/3.9/reference/datamodel.html#object.bool

3.3.2 自定义属性访问上部

★★★★★以下很重要★★★★★

调用此方法以实现真值检测以及内置的 bool() 操作;应该返回 FalseTrue。如果未定义此方法,则会查找并调用 __len__() 并在其返回非零值时视对象的逻辑值为真。如果一个类既未定义 __len__() 也未定义 __bool__() 则视其所有实例的逻辑值为真

  • 官方还说了一句话, 用户自定义对象可通过提供 bool() 方法来定制其逻辑值。

  • 我们来演示一下

  • 示例1

     class  A:
         pass
     a = A()
     if a:
         print('类的实例,其布尔值往往是真')   # 你会看到这个输出
    
  • 示例2

     class B:
         def __init__(self,name):
             self.name = name
         def __bool__(self):
             if self.name == 'wuxianfeng':  # 实例名叫wuxianfeng才是真的
                 return True
             else:
                 return False
     b1 = B('haha')
     if b1:
         print(f'B这个类的实例名字叫{b1.name},所以是真')
     else:
         print(f'B这个类的实例名字叫{b1.name},所以是假')   # 打印
     b2 = B('wuxianfeng')
     if b2:
         print(f'B这个类的实例名字叫{b2.name},所以是真')  # 打印
     else:
         print(f'B这个类的实例名字叫{b2.name},所以是假')
     print('----注意----')
     print(b1 == False)  # 不对的   结果是False
     print(b2 == True)   # 不对的   结果是False
     
    

len魔术方法

 class C:
     def __init__(self,age):
         self.age = age
     def __len__(self):
         return 1 if self.age >= 18 else 0
 c = C(16)
 if c:
     print(f'c的年龄是{c.age},成年')
 else:
     print(f'c的年龄是{c.age},未成年')

小Demo

  • 自动化的时候经常要封装元素存在与否来断言,看懂下面的你需要有一定的selenium基础
  • 当然我也只是简单的作个demo演示,没有考虑太多细节,比如嵌入显式等待等
  • 要强调的是,当元素存在的时候return driver.find_element(*locator),这个返回是WebElement对象,就是典型的一个对象,它没有定义bool和len的魔术方法。
 
 from selenium import webdriver
 def get_element(driver,locator):
     try:
         return driver.find_element(*locator)
     except:
         return False
 
 
 driver = webdriver.Chrome()
 driver.get('http://106.14.1.150:8090/forum.php')
 ele_username_locator = 'id','ls_usernam'   # ls_usernam-->不存在 # ls_username --> 存在
 if get_element(driver,ele_username_locator):  #
     print('元素存在')
 else:
     print('元素不存在')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxianfeng023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值