How to "generalize" a function?
Michael Spencer
mahs at telcopartners.com
Sun Apr 24 19:35:08 EDT 2005
Thomas Köllmann wrote:
> Hi, everybody!
>
> I'm teaching myself Python, and I have no experience in programming
> apart from some years of shell scripting. So, please bear with me.
>
> These two funktions are part of an administrative script I've set
> myself as a first lesson, and, as you will see, they're practically the same,
> except for one variable. So I'd like to weld them together -- but I
> can't find out how to.
>
> def writeIP(ip):
> """ IP schreiben """
> regex = re.compile('(.*)address(.*)')
This is the only difference between the functions, isn't it?
So, instead of hardwiring 'address' or 'netmask' into the regexp template, you
should insert it based on an argument passed to the function. String
interpolation works well here: e.g.,
>>> '(.*)%s(.*)' % 'netmask'
'(.*)netmask(.*)'
>>>
> confFile = open(networkConf, 'r')
> conf = confFile.readlines()
> confFile.close
Note, here you presumably mean confFile.close() i.e., you must supply the parens
to call the function.
[snip]
>
> I feel it should be possible to use something like
>
> def writeFile(ip,keyword):
> ...
>
Indeed. Use keyword as the argument to the string interpolation
>>> regex = re.compile('(.*)%s(.*)' % keyword)
> but how would I construct expressions like
>
> netmaskLineNum = conf.index(netmaskLine)
>
I think these should work unchanged. But it would be easier to read if you
changed these names to be neutral to the application e.g., instead of
netmaskLine, foundLine
HTH
Michael
More information about the Python-list
mailing list