long if语句的替代方案 [英] Alternatives to long if statement

查看:122
本文介绍了long if语句的替代方案的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前有一个很长的if语句,看起来很难看,我相当肯定是不合适的。它看起来像这样。

I currently have a long if statement, which looks ugly, and I'm fairly certain isn't proper. It looks something like this.

if self.folderactive.isChecked:
    folders.createDir('Desktop')
elif not self.folderactive.isChecked:
    folders.deleteDir('Desktop')

if self.folderactive_2.isChecked:
    folders.createDir('Documents')
elif not self.folderactive_2.isChecked:
    folders.deleteDir('Documents')

if self.folderactive_3.isChecked:
    folders.createDir('Downloads')
elif not self.folderactive_3.isChecked:
    folders.deleteDir('Downloads')

if self.folderactive_4.isChecked:
    folders.createDir('Music')
elif not self.folderactive_4.isChecked:
    folders.deleteDir('Music')

if self.folderactive_5.isChecked:
    folders.createDir('Pictures')
elif not self.folderactive_5.isChecked:
    folders.deleteDir('Pictures')

if self.folderactive_6.isChecked:
    folders.createDir('Public')
elif not self.folderactive_6.isChecked:
    folders.deleteDir('Public')

if self.folderactive_7.isChecked:
    folders.createDir('Templates')
elif not self.folderactive_7.isChecked:
    folders.deleteDir('Templates')

if self.folderactive_8.isChecked:
    folders.createDir('Videos')
elif not self.folderactive_8.isChecked:
    folders.deleteDir('Videos')

我如何简化这一长条件的条件?

How would I go about simplifying this long list of conditionals?

推荐答案

首先,所有 elif ... 子句可以写成 else:

First, all elif ... clause can be written as else:.

多个 if .. else .. 可以表示为循环:

checkbox_directory_pairs = [
    (self.folderactive, 'Desktop'),
    (self.folderactive_2, 'Documents'),
    (self.folderactive_3, 'Downloads'),
    ...
]

for checkbox, directory in checkbox_directory_pairs:
    if checkbox.isChecked:
        folders.createDir(directory)
    else:
        folders.deleteDir(directory)

这篇关于long if语句的替代方案的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆