有什么方法代替频繁的if else
时间: 2023-05-29 21:04:25 浏览: 64
1.使用多态:将不同的行为封装到不同的类中,让每个类都实现相同的接口,然后在运行时根据不同的情况实例化不同的类,避免使用if else。
2.使用策略模式:将不同的算法封装到不同的策略类中,然后在运行时根据不同的情况选择不同的策略类,避免使用if else。
3.使用状态模式:将不同的状态封装到不同的状态类中,然后在运行时根据不同的情况选择不同的状态类,避免使用if else。
4.使用数据驱动的方法:将不同的数据和对应的处理逻辑存储在数据结构中,然后在运行时根据不同的数据选择对应的处理逻辑,避免使用if else。
5.使用函数指针或者函数对象:将不同的行为封装到不同的函数中,然后在运行时根据不同的情况选择对应的函数,避免使用if else。
相关问题
appium有什么可以代替if-else,
在使用 Appium 进行自动化测试时,可以使用 switch-case 语句或者使用策略模式来代替 if-else 语句。
1. switch-case 语句:
switch-case 语句是一种比 if-else 语句更简洁的方式来处理多个条件。在 Appium 中,可以使用 switch-case 语句来处理多个页面元素的操作。
示例代码:
```python
element = driver.find_element_by_id("element_id")
action = "click"
# 使用 switch-case 语句处理多个条件
def switch_case(element, action):
switcher = {
"click": element.click(),
"send_keys": element.send_keys("text"),
"get_attribute": element.get_attribute("attribute_name")
}
return switcher.get(action, "Invalid action")
# 调用 switch-case 函数
result = switch_case(element, action)
print(result)
```
2. 策略模式:
策略模式是一种更加灵活的方式来代替 if-else 语句。在 Appium 中,可以使用策略模式来处理多个操作,例如点击、输入等。
示例代码:
```python
# 定义一个策略接口
class ElementActionStrategy:
def do_action(self, element):
pass
# 定义点击策略
class ClickStrategy(ElementActionStrategy):
def do_action(self, element):
element.click()
# 定义输入策略
class SendKeysStrategy(ElementActionStrategy):
def do_action(self, element):
element.send_keys("text")
# 定义获取属性策略
class GetAttributeStrategy(ElementActionStrategy):
def do_action(self, element):
element.get_attribute("attribute_name")
# 使用策略模式处理多个操作
element = driver.find_element_by_id("element_id")
action = "click"
if action == "click":
strategy = ClickStrategy()
elif action == "send_keys":
strategy = SendKeysStrategy()
else:
strategy = GetAttributeStrategy()
strategy.do_action(element)
```
以上是两种可以代替 if-else 的方式,可以根据实际情况选择合适的方式来处理多个条件。
代替if else的方法
以下是几种代替if else语句的方法:
1.使用字典映射:
```python
def dispatch_if(operator, x, y):
if operator == 'add':
return x + y
elif operator == 'sub':
return x - y
elif operator == 'mul':
return x * y
elif operator == 'div':
return x / y
else:
return None
def dispatch_dict(operator, x, y):
return {
'add': lambda: x + y,
'sub': lambda: x - y,
'mul': lambda: x * y,
'div': lambda: x / y,
}.get(operator, lambda: None)()
print(dispatch_if('add', 2, 8)) # 输出:10
print(dispatch_dict('add', 2, 8)) # 输出:10
```
2.使用多态:
```python
class Operator:
def operate(self, x, y):
pass
class AddOperator(Operator):
def operate(self, x, y):
return x + y
class SubOperator(Operator):
def operate(self, x, y):
return x - y
class MulOperator(Operator):
def operate(self, x, y):
return x * y
class DivOperator(Operator):
def operate(self, x, y):
return x / y
def dispatch_polymorphism(operator, x, y):
return operator.operate(x, y)
print(dispatch_polymorphism(AddOperator(), 2, 8)) # 输出:10
```
3.使用函数映射:
```python
def add(x, y):
return x + y
def sub(x, y):
return x - y
def mul(x, y):
return x * y
def div(x, y):
return x / y
def dispatch_func(operator, x, y):
return {
'add': add,
'sub': sub,
'mul': mul,
'div': div,
}.get(operator, lambda x, y: None)(x, y)
print(dispatch_func('add', 2, 8)) # 输出:10
```
4.使用try...except:
```python
def dispatch_try(operator, x, y):
try:
return {
'add': x + y,
'sub': x - y,
'mul': x * y,
'div': x / y,
}[operator]
except KeyError:
return None
print(dispatch_try('add', 2, 8)) # 输出:10
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)