Разработих програма на 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 IPn",
"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()
В този код правя функция за Hostname, Random hostname и nameserver, но във всички 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 IPn",
"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()
Искам да благодаря на всички, които ще ми помогнат с това.
Отговори:
0 за отговор № 1Изглежда, че вече знаете отговора със създаването на друга функция, error_handler
да вършат многократната работа! Можете да обгърнете обработващия грешка в a опитайте / с изключение на блок, който би изглеждал нещо по този начин:
def hostname():
try:
dlg = wx.TextEntryDialog(None,
"What is your default Hostname?",
"Hostname",
socket.gethostname())
except:
error_handler(dlg)
0 за отговор № 2
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)
Продължете да добавяте условия към функцията в зависимост от това какво искате