[英]Python - How to shorten code
我开发了一个 Python 程序,我需要有关简化的建议。
这是我的代码的一部分:
import wx
import sys
import socket
def error_handler(c):
if c == 'canceled':
sys.exit('User canceled configuration.')
elif c == 'empty':
sys.exit('Empty value.')
def hostname():
dlg = wx.TextEntryDialog(None,
'What is your default Hostname?',
'Hostname',
socket.gethostname())
if dlg.ShowModal() == wx.ID_CANCEL:
error_handler('canceled')
else:
if dlg.GetValue() == "":
error_handler('empty')
else:
HOSTNAME = dlg.GetValue()
return HOSTNAME
def random_hostname():
dlg = wx.SingleChoiceDialog(None,
'Do you want to randomize your Hostname',
'Randomize',
['Yes', 'No', 'Disable'],
wx.CHOICEDLG_STYLE)
if dlg.ShowModal() == wx.ID_CANCEL:
error_handler('canceled')
else:
RANDOM_HOSTNAME = dlg.GetStringSelection()
return RANDOM_HOSTNAME
def nameserver():
dlg = wx.TextEntryDialog(None,
'Nameserver IP\n',
'Nameserver',
'127.0.0.1')
if dlg.ShowModal() == wx.ID_CANCEL:
error_handler('canceled')
else:
if dlg.GetValue() == "":
error_handler('empty')
else:
NAMESERVER = dlg.GetValue()
return NAMESERVER
def main():
app = wx.App()
print 'HOSTNAME =', hostname()
print 'RANDOM_HOSTNAME =', random_hostname()
print 'NAMESERVER =', nameserver()
app.MainLoop()
if __name__ == '__main__':
main()
在这段代码中,我为主机名、随机主机名和名称服务器创建了函数,但在所有 3 个函数中,我必须重复几乎相同的代码:
if dlg.ShowModal() == wx.ID_CANCEL:
error_handler('canceled')
else:
if dlg.GetValue() == "":
error_handler('empty')
else:
HOSTNAME = dlg.GetValue()
return HOSTNAME
但是我想制作 20 多个函数来检查某些值。 是否有(我知道有)一些更好的技巧来缩短每个函数?
我想要这样的东西:
import wx
import sys
import socket
def error_handler(c):
if c == 'canceled':
sys.exit('User canceled configuration.')
elif c == 'empty':
sys.exit('Empty value.')
else
return dialog value
def hostname():
dlg = wx.TextEntryDialog(None,
'What is your default Hostname?',
'Hostname',
socket.gethostname())
error_handler(dlg)
def random_hostname():
dlg = wx.SingleChoiceDialog(None,
'Do you want to randomize your Hostname',
'Randomize',
['Yes', 'No', 'Disable'],
wx.CHOICEDLG_STYLE)
error_handler(dlg)
def nameserver():
dlg = wx.TextEntryDialog(None,
'Nameserver IP\n',
'Nameserver',
'127.0.0.1')
error_handler(dlg)
def main():
app = wx.App()
print 'HOSTNAME =', hostname()
print 'RANDOM_HOSTNAME =', random_hostname()
print 'NAMESERVER =', nameserver()
app.MainLoop()
if __name__ == '__main__':
main()
我要感谢所有帮助我解决这个问题的人。
看起来您已经知道创建另一个函数error_handler
来完成重复工作的答案! 您可以将错误处理程序包装在一个try/except块中,该块看起来像这样:
def hostname():
try:
dlg = wx.TextEntryDialog(None,
'What is your default Hostname?',
'Hostname',
socket.gethostname())
except:
error_handler(dlg)
def funct(dlg, wx, funcCheck):
if dlg.ShowModal() == wx.ID_CANCEL:
error_handler('canceled')
else:
if dlg.GetValue() == "":
error_handler('empty')
else:
value = funcCheck()
return value
那么你可以这样称呼它
funct(dlg, wx, dlg.GetValue)
根据您的需要继续向函数添加条件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.