for/while和if/switch

循环与选择结构效率分析
本文探讨了for循环与while循环的应用场景及效率对比,并详细分析了switch-case结构的底层实现方式及其与if-else语句的效率差异。在不同情况下,switch-case能通过跳转表减少比较次数,提高程序执行效率。

for适合用于知道循环次数的情况,而while循环适用于知道循环条件的情况。while循环更强大。

它们两个的效率基本没有差别。

gcc test.c -g/gcc -c test.c    ->a.o

objdump -d a.o//查看程序对应的汇编代码

switch(会生成跳转表):

1、当case语句小于等于3的时候,switch语句的底层实现与if-else的底层实现相同。

2、case语句大于等于4句时,且每两个case语句之间产生的的间隔之和不超过6时,按线性结构查找。

3、case最大值和case最小值之间值相差大于255的情况下,采用树形结构查找。

switchif-else的效率比较(不考虑编译器的优化和条件传送,只考虑跳转次数):

switch........case结构中有跳转表,所以只要经过一次比较就可以正确的找到跳转分支,所以平均情况下跳转次数为1.

 

switch........case在分支较多的时候比if...........else要高效。但是它只能进行字符和数字的判断,相比较而言,if..........else更加灵活,适用范围更广,功能更强大。

 

 


为了重构代码以避免嵌套超过四个的`if`、`for`、`while`、`switch`或`try`语句,你可以考虑以下几个优化技巧: 1. **条件组合**:如果几个条件需要检查,尝试将它们合并成单个条件,例如使用布尔运算符(&& 或 ||)。 ```python if condition1 and condition2 and condition3 and condition4: # do something ``` 2. **使用三元表达式或字典查找**:对于简单的条件判断,可以使用三元表达式替代复杂的if-else结构。 ```python result = 'success' if condition else 'failure' ``` 或者 ```python action_map = {True: 'do_something', False: 'do_something_else'} execute_action = action_map[condition] ``` 3. **提取函数**:将一些复杂的逻辑拆分成独立的函数,每个函数只处理一部分任务。这样可以减少代码块的深度。 ```python def check_conditions(condition1, condition2): return condition1 and condition2 if check_conditions(condition1, condition2): process() ``` 4. **使用循环结构**:如果有多个需要遍历的情况,可以考虑使用循环(如forwhile),而不是嵌套多个条件。 ```python for item in list: if is符合条件(item): perform_action(item) ``` 5. **迭代器或生成器**:如果条件依赖于某个序列,可以利用迭代器或生成器逐个检查元素,而不是一性处理所有内容。 6. **重构逻辑结构**:如果有必要,可能会涉及到改变算法或数据结构的选择,比如使用集合操作、列表推导等代替循环。 记住,在重构时始终关注代码的可读性维护性,确保每修改都能带来清晰度的提升。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值