Python 2.7 长if语句的替代方案

Python 2.7 长if语句的替代方案,python-2.7,if-statement,conditional,Python 2.7,If Statement,Conditional,我现在有一个很长的if语句,看起来很难看,我很确定这是不合适的。看起来像这样 if self.folderactive.isChecked: folders.createDir('Desktop') elif not self.folderactive.isChecked: folders.deleteDir('Desktop') if self.folderactive_2.isChecked: folders.createDir('Documents') elif

我现在有一个很长的if语句,看起来很难看,我很确定这是不合适的。看起来像这样

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')

我该如何简化这个长长的条件列表呢?

首先,您可以简化如下语句:

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


首先,您可以简化如下语句:

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


您应该使用关联数组:复选框编号作为索引,文件夹名称作为值。

您应该使用关联数组:复选框编号作为索引,文件夹名称作为值。

首先,所有
elif…
子句可以写成
其他:

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

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)

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

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

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)

谢谢,经过一些小的调整,效果非常好。我必须将
if self.folderactive.isChecked:
更改为
if checkbox.isChecked:
@josh,啊。。这是我的错误。我修正了密码。谢谢你的评论。谢谢,这是非常好的一些小调整。我必须将
if self.folderactive.isChecked:
更改为
if checkbox.isChecked:
@josh,啊。。这是我的错误。我修正了密码。谢谢你的评论。