Python中如何优化if..else语句?

新手,按照逻辑写了个循环。如下

list_a= []
old = []
new = []
test = []
...

for i in list_a: if ‘keyword’ in list_a[0]: if list_a[1] == A: new.append[list[2]] else: old.append[list[2]] else: if list_a[1]== B and ConditionB: test.append[list[2]]

if len(old) == 0 and len(new)>10: dosomething() else: if len(new) < len(old) and len(test) ==0: dosomething2(0) else: if len(test)==0: dosomething3() else: if len(test) > 5: dosomething4()

老码农同事说我 if else 写的太多,让别人不容易看懂,建议优化下代码比如用 If .. continue。 但是我想了下似乎这种有众多子条件的似乎不太适合用 if ...contiune 来做啊。 请教大家这段代码有啥优化建议么


Python中如何优化if..else语句?

22 回复

核心思路:减少嵌套、使用字典映射或模式匹配。

如果只是简单优化可读性,可以用三元表达式:

value = a if condition else b

多个条件判断时,用字典映射代替if-elif链更清晰:

def action_a(): return "A"
def action_b(): return "B"

actions = {"case1": action_a, "case2": action_b}
result = actions.get(key, lambda: "default")()

Python 3.10+ 直接用match-case:

match status:
    case 200:
        handle_success()
    case 404:
        handle_not_found()
    case _:
        handle_default()

总结:根据场景选合适方案,优先保证可读性。

下面那个为啥不用 elif

这个,,,把所有的 css 都拿掉了,有 gnu 的感觉。。。。

可以用 elseif。。。主要用 else 我个人感觉更好理解啊。。

确实是有一定优化空间的,我能想到的:

第一段的 append[list[2]] 这个逻辑是重复的,你可以把 if 判断抽出来成一个变量或者函数,然后再 append

下面那个可以单独搞一个函数,然后 if len(old) == 0 and len(new)>10: return dosomething() 这样

看着不舒服,我习惯把一种情况这写在一起
比如
if ‘keyword’ in list_a[0] and if list_a[1] == A:
pass

if len(old) == 0 and len(new)>10:
dosomething()
return;

if len(new) < len(old) and len(test) ==0:
dosomething2(0)
return;
if len(test)==0:
dosomething3()
return
if len(test) > 5:
dosomething4()
return

这样写,时间久了可能自己都忘了,实在不行就写点注释把逻辑注释出来就好了。同 5 楼,一般遇到这样的情况就把重复部分提取出来做 function 调用。

同七楼,面向未来写法

我也考虑过这种写法,但是感觉这样写效率不如我那样写啊。我的写法满足了 if 额度条件,就不会再去 elif 里做判断。而你这个写法,会把所有的 if 做一个判断啊,哪怕是在第一个 if 就满足了。

多用 return,少用 else,也许有的根本就不好优化,看你这个方法在干什么咯,看着头就大,怎么有这么多 else

if ‘keyword’ in list_a[0]:
if list_a[1] == A:
=============
这里可不可以这个 if ‘keyword’ in list_a[0] and list_a[1] == A:

#10 最后一节要 return 了再用,前面就 if else

#10 如果不是最后一节要用,就拆函数。

可以用 filter 和 lambda 表达式

可以。但是这么写有个问题。

<br>if 'keyword' in list_a[0]:<br> if list_a[1] == A:<br> new.append[list[2]]<br> else:<br> old.append[list[2]]<br>
这段我就要写成
<br>if 'keyword' in list_a[0] and list_a[1] == A:<br>elif 'keyword' in list_a[0] and list_a[1] != A:<br><br>
这样字数就变多了。。。这程序有大小限制。。。这么写容易超出字数限制。。

说实话,真的很难看懂😂你可以把这串代码要做什么详细描述一下,可能大家能提供更有效、简洁的写法

python<br>def process():<br> for i in range(len(list_a)):<br> if 'keyword' in list_a[i]:<br> if list_a[i] == A:<br> new_.append(list_[i])<br> else:<br> old.append(list_[i])<br> elif list_a[i]== B and ConditionB:<br> test.append(list_[i+1])<br><br> # situation 1: some description<br> if len(old) == 0 and len(new_)&gt;10:<br> do_something()<br> return<br> <br> # situation 2: some description<br> if len(new_) &lt; len(old) and len(test) ==0:<br> do_something2()<br> return<br> <br> # situation 3: some description<br> if len(test) != 0 and len(test) &gt; 5:<br> do_something4()<br> else:<br> do_something3()<br>

因为不知道你具体逻辑 只能简单的帮你优化一下了
python<br>list_a = []<br>old_list = []<br>new_list = []<br><br>for i in list_a:<br> k, w, res, *_ = list_a # 使用解包,变量名再优化下可以增加可读性<br> if 'keyword' in k and w == A:<br> new_list.append(res)<br> else:<br> old_list.append(res)<br> <br> <br>old_list_length = len(old_list)<br>new_list_length = len(new_list)<br><br>if old_list_length == 0 and new_list_length &gt; 10:<br> do_something()<br> return # 如果后面没有的话,直接在此处 return 减少 if else<br><br>if new_list_length &lt; old_list_length and len(test) == 0<br> dosomething2(2)<br> return # 同上<br><br>if len(test) == 0:<br> dosomething3()<br> return # 同上<br><br>if len(test) &gt; 5:<br> dosomething4()<br>
如果知道你具体逻辑,这个判断应该是能优化不少的。

把这段代码拆分成两个函数看起来就会好很多了

list_aikeyword应该是你简写给我们看的时候写错了,几个变量有点乱,不好说怎么优化。

单说下面那一部分用if...elif...elif...elif会好点,减少缩进的层级。

回到顶部