improve this newbie code/nested functions in Python?
Terry Reedy
tjreedy at udel.edu
Fri Mar 20 01:06:05 EDT 2009
Esmail wrote:
> Hi,
>
> I'm new to writing Python code. This is a simple client I wrote, it
> works, but I feel it doesn't look as clean as it could. Can anyone
> make suggestions how to streamline this code?
>
> Also, I am using two nested functions, it seems that nested functions
> aren't used that much in Python - is that correct? And if so, how
> come?
What you wrote are two nested classes, not functions. In my opinion,
neither should be nested. Nothing is gained and something is lost.
Neither are used by client; indeed both use client.
Nested classes are rare because they have little use and are almost
never necessary.
Nested functions are a different story.
I would rename '_parent' (misleading) as 'client' or 'user'.
Terry Jan Reedy
> ps: I realize there is minimal error checking/exception handling.
>
> #!/usr/bin/env python
>
>
> import sys
> from socket import *
> from threading import Thread
>
>
> class Client(object):
> def __init__(self, host="localhost", port=5555, name = "esmail"):
> self._host = host
> self._port = port
> self._name = name
> self._address=(self._host, self._port)
> self._sock=socket(AF_INET, SOCK_STREAM)
> self._sock.connect(self._address)
> self._parent = self
Makes no sense in the code given.
> self._keepGoing = True
>
> def info(self):
> return self._host, self._port, self._name
>
>
>
> class Listener(Thread):
> def __init__(self, parent, tname="listener"):
> Thread.__init__(self,name = tname)
> self._parent = parent
> print self._parent._host
>
> def run(self):
>
> while self._parent._keepGoing:
> m = self._parent._sock.recvfrom(1024)
> print m[0]
>
>
>
> class Speaker(Thread):
> def __init__(self, parent, tname = "speaker"):
> Thread.__init__(self,name = tname)
> self._parent = parent
> self._parent._sock.send(self._parent._name + "\n")
>
>
> def run(self):
>
> while(True):
> m = raw_input("-> ")
> if m == "bye":
> self._parent._sock.send(self._parent._name + " is
> signing off.\n")
> self._parent._sock.send("bye\n")
> self._parent._keepGoing = False
> break;
> else:
> self._parent._sock.send(m + "\n")
>
>
> def main():
>
> if len(sys.argv) == 4: # prog name + 3 args
> host = sys.argv[1]
> port = int(sys.argv[2])
> name = sys.argv[3]
> c = Client(host, port, name)
> else:
> c = Client()
>
> print "Client connecting to - host=%s port=%d name=%s" % c.info
> ()
>
> s = Client.Speaker(c)
> s.start()
>
> l = Client.Listener(c)
> l.start()
>
>
> main()
> --
> http://mail.python.org/mailman/listinfo/python-list
>
More information about the Python-list
mailing list