在if __name__ =='__ main__':语句下编写大量代码是很常见的

时间:2016-08-04 09:39:41

标签: python

我目前的编码风格就像

import xxx

def fun1()
def fun2()
...

if __name__ == '__main__': 

    task = sys.argv[1]
    if task =='task1':
        do task1
    elif task == 'task2':
        do task2
    ...

我的问题是

下的代码部分
if __name__ == '__main__': 
与上面定义的函数相比,

非常庞大,我被告知这不是一个好的编程风格。这是因为我修改了内容并经常在每个任务中进行实验,并且我希望将代码的这些部分与不太可能被修改的函数分开。我想在这里了解更多建议,谢谢!

2 个答案:

答案 0 :(得分:4)

就像BusyAnt所说的那样,常见的方法是

import xxx

def fun1()
def fun2()
...



def main():
    task = sys.argv[1]
    if task =='task1':
        do task1
    elif task == 'task2':
        do task2
    ...

if __name__ == '__main__':
    main()

这样做的好处是它不会在import上运行,但main()仍可以从其他模块或文件运行(如果愿意的话)。

答案 1 :(得分:3)

禁止progressBar.Minimum = 0; progressBar.Maximum = 100; if (!(txturl.Text == string.Empty)) { try { IEnumerable<VideoInfo> videos = DownloadUrlResolver.GetDownloadUrls(txturl.Text); VideoInfo video = videos.First(p => p.VideoType == VideoType.Mp4 && p.Resolution == Convert.ToInt32(cmbResolution.Text)); if (video.RequiresDecryption) DownloadUrlResolver.DecryptDownloadUrl(video); VideoDownloader downloader = new VideoDownloader(video, Path.Combine(Application.StartupPath, video.Title + video.VideoExtension)); downloader.DownloadProgressChanged += downloader_DownloadProgressChanged; Thread thread = new Thread(() => { downloader.Execute(); }) { IsBackground = true }; thread.Start(); } catch (Exception yt) { MessageBox.Show(yt.Message); } } else { MessageBox.Show("Input field cannot be empty."); } 下编写很多内容,尽管将所有内容包装在if __name__ == '__main__'函数中被认为更好且更具可读性即可。这样,当main()此模块在另一个模块中时,main()中的代码不会被执行,您仍然可以选择运行它,通过调用{{ 1}}。

您的代码将如下所示:

import

我建议您阅读imported_script.main()声明所做的事情,among the many questions asked about it