/ / Python - Как да съкратим кода - python, function

Python - Как да съкратим кода - python, function

Разработих програма на 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)

Продължете да добавяте условия към функцията в зависимост от това какво искате