From: Scott on 11 Jan 2010 13:35 When creating a function is there any difference between putting everything under the "def" or not? Here I created a function called CscoPortNum to convert the network port number field in a Cisco syslog string from a an ascii name back into its numeric form if required. Does it matter at all that I created the translation dictionary first and then started the def? # def CscoPortNum(RulL) # Accept a single ACL Rule as a List split into individual words and # return Port number. Convert from Cisco syslog Port name if required portfpth = "\\progra~1\\syslogd\\ACL_Logs\\Port-Translations.txt" # Create dictionary of portnames to portnumbers portD = {} for prtnmS in open(portfpth): prtnmS = prtnmS.rstrip() spltprtL = prtnmS.split(" ") portD[spltprtL[2]] = [spltprtL[1]] def CscoPortNum(RulL): if "eq" in RulL: # Is the Port listed? if RulL[RulL.index("eq")+1][0].isdigit(): # Is it numeric? # if re.search("\d", RulL[RulL.index("eq")+1][0]): # Is it numeric? portnum = RulL[RulL.index("eq")+1] # If numeric, use as is. else: # If named, look up numeric translation portnum = portD[RulL[RulL.index("eq")+1]] portnum = str(portnum).strip("[]'") else: portnum = "noeq" return portnum
From: MRAB on 11 Jan 2010 13:57 Scott wrote: > When creating a function is there any difference between putting > everything under the "def" or not? > > Here I created a function called CscoPortNum to convert the network > port number field in a Cisco syslog string from a an ascii name back > into its numeric form if required. Does it matter at all that I > created the translation dictionary first and then started the def? > > # def CscoPortNum(RulL) > # Accept a single ACL Rule as a List split into individual words and > # return Port number. Convert from Cisco syslog Port name if required > portfpth = "\\progra~1\\syslogd\\ACL_Logs\\Port-Translations.txt" > # Create dictionary of portnames to portnumbers > portD = {} > for prtnmS in open(portfpth): > prtnmS = prtnmS.rstrip() > spltprtL = prtnmS.split(" ") > portD[spltprtL[2]] = [spltprtL[1]] > def CscoPortNum(RulL): > if "eq" in RulL: # Is the Port listed? > if RulL[RulL.index("eq")+1][0].isdigit(): # Is it numeric? > # if re.search("\d", RulL[RulL.index("eq")+1][0]): # Is it > numeric? > portnum = RulL[RulL.index("eq")+1] # If numeric, use > as is. > else: > # If named, look up numeric translation > portnum = portD[RulL[RulL.index("eq")+1]] > portnum = str(portnum).strip("[]'") > else: portnum = "noeq" > return portnum There's nothing wrong with building dicts or other lookup tables outside a function in order to avoid re-creating them every time the function is called.
From: r0g on 11 Jan 2010 14:08 Scott wrote: > When creating a function is there any difference between putting > everything under the "def" or not? > > Here I created a function called CscoPortNum to convert the network > port number field in a Cisco syslog string from a an ascii name back > into its numeric form if required. Does it matter at all that I > created the translation dictionary first and then started the def? > > # def CscoPortNum(RulL) > # Accept a single ACL Rule as a List split into individual words and > # return Port number. Convert from Cisco syslog Port name if required > portfpth = "\\progra~1\\syslogd\\ACL_Logs\\Port-Translations.txt" > # Create dictionary of portnames to portnumbers > portD = {} > for prtnmS in open(portfpth): > prtnmS = prtnmS.rstrip() > spltprtL = prtnmS.split(" ") > portD[spltprtL[2]] = [spltprtL[1]] > def CscoPortNum(RulL): > if "eq" in RulL: # Is the Port listed? > if RulL[RulL.index("eq")+1][0].isdigit(): # Is it numeric? > # if re.search("\d", RulL[RulL.index("eq")+1][0]): # Is it > numeric? > portnum = RulL[RulL.index("eq")+1] # If numeric, use > as is. > else: > # If named, look up numeric translation > portnum = portD[RulL[RulL.index("eq")+1]] > portnum = str(portnum).strip("[]'") > else: portnum = "noeq" > return portnum In this snippet no, you're not calling the function in the preceding code so there's no problem. You can intersperse functions with the rest of your code however you like, they just wont be visible to the preceding code, but it's better to stick them all at the top of your script. Even better when you have more than a handful is to bundle functions into separate py files and then import that file e.g. ---contents of foobar.py----- def foo(): print "foo" def bar: print "bar" ---contents of your main script----- import foobar print foo(),bar() Roger.
From: r0g on 11 Jan 2010 14:16 r0g wrote: > Scott wrote: >> When creating a function is there any difference between putting >> everything under the "def" or not? >> >> Here I created a function called CscoPortNum to convert the network >> port number field in a Cisco syslog string from a an ascii name back >> into its numeric form if required. Does it matter at all that I >> created the translation dictionary first and then started the def? >> >> # def CscoPortNum(RulL) >> # Accept a single ACL Rule as a List split into individual words and >> # return Port number. Convert from Cisco syslog Port name if required >> portfpth = "\\progra~1\\syslogd\\ACL_Logs\\Port-Translations.txt" >> # Create dictionary of portnames to portnumbers >> portD = {} >> for prtnmS in open(portfpth): >> prtnmS = prtnmS.rstrip() >> spltprtL = prtnmS.split(" ") >> portD[spltprtL[2]] = [spltprtL[1]] >> def CscoPortNum(RulL): >> if "eq" in RulL: # Is the Port listed? >> if RulL[RulL.index("eq")+1][0].isdigit(): # Is it numeric? >> # if re.search("\d", RulL[RulL.index("eq")+1][0]): # Is it >> numeric? >> portnum = RulL[RulL.index("eq")+1] # If numeric, use >> as is. >> else: >> # If named, look up numeric translation >> portnum = portD[RulL[RulL.index("eq")+1]] >> portnum = str(portnum).strip("[]'") >> else: portnum = "noeq" >> return portnum > > > In this snippet no, you're not calling the function in the preceding > code so there's no problem. You can intersperse functions with the rest > of your code however you like, they just wont be visible to the > preceding code, but it's better to stick them all at the top of your > script. Even better when you have more than a handful is to bundle > functions into separate py files and then import that file e.g. > > ---contents of foobar.py----- > def foo(): > print "foo" > def bar: > print "bar" > > ---contents of your main script----- > import foobar > print foo(),bar() > > Roger. Whoops, that should have been... > ---contents of your main script----- > import foobar > print foobar.foo(),foobar.bar() Roger. >
From: Phlip on 11 Jan 2010 14:50 MRAB wrote: > Scott wrote: >> for prtnmS in open(portfpth): >> prtnmS = prtnmS.rstrip() > There's nothing wrong with building dicts or other lookup tables outside > a function in order to avoid re-creating them every time the function is > called. However, please consider writing complete, pronounceable names for variables. This looks like Fortran!
|
Next
|
Last
Pages: 1 2 Prev: pyserial: Unexpected Local Echo Next: problem with multiprocessing and defaultdict |