[Python-ideas] Inline Functions - idea

Alex Rodrigues lemiant at hotmail.com
Wed Feb 5 15:32:50 CET 2014


Hi everyone,
This is my first time on the Python mailing lists. I've been learning a lot about how python is run recently and today I thought I ran across an idea which might create in interesting discussion.Today I was writing a piece of software where I had a block of code that would take a bunch of local variables, apply some transformations to them and then output them as a a string to a log. Then I realized that I actually wanted to reuse this code in multiple locations - there were multiple cases where I might need to do this. My natural inclination was to write a function in order to maintain DRY programming. This was prohibitively challenging, however, since the code itself interacted with lots of variables in the namespace. The number of arguments to the function would have to be very large and possibly would change on a fairly regular basis.This seems like a fairly common problem in programming, having a piece of code which is both reused and heavily integrated with the namespace making it necessary to use copy-paste. As a solution to this I propose the idea of an inline function. An inline function would run in it's parent's namespace instead of creating a new one. This would allow you to avoid passing back and forth tons of values while still maintaining DRY code. It might look something like this if implemented in a log for a traction control system:
# First without an inline functiondef main():    file = open('file.txt')    counter = 0    while True:        counter += 1        frontL, frontR, backL, backR = getWheelSpeeds()        if counter > 100: # Log at least every 10 seconds            slipL = abs(frontL - backL)            slipR = abs(frontR - backR)            file.write('Speeds: ('+frontL+', '+frontR+', '+backL+', '+backR+'), \n Slip: '+slipL+', '+slipR)            counter = 0        elif abs(frontR-backR) > 1 or abs(frontL-backL) > 1: # Also log if the wheels are slipping            slipL = abs(frontL - backL)            slipR = abs(frontR - backR)            file.write('Speeds: ('+frontL+', '+frontR+', '+backL+', '+backR+'), \n Slip: '+slipL+', '+slipR)            counter = 0        elif average([frontL, frontR, backL, backR]) > 60: # Also log if we're going really fast            slipL = abs(frontL - backL)            slipR = abs(frontR - backR)            file.write('Speeds: ('+frontL+', '+frontR+', '+backL+', '+backR+'), \n Slip: '+slipL+', '+slipR)            counter = 0                    time.sleep(.1)

# And now with an inline functiondef main():    file = open('file.txt')    counter = 0    while True:        counter += 1        frontL, frontR, backL, backR = getWheelSpeeds()        if counter > 100: # Log every 10 seconds no matter what            saveLine()        elif abs(frontR-backR) > 1 or abs(frontL-backL) > 1: # Also log if the wheels are slipping            saveLine()        elif average([frontL, frontR, backL, backR]) > 60: # Also log if we're going really fast            saveLine()        time.sleep(.1)
inline def saveLine():    slipL = abs(frontL - backL)    slipR = abs(frontR - backR)    file.write('Speeds: ('+frontL+', '+frontR+', '+backL+', '+backR+'), \n Slip: '+slipL+', '+slipR)    counter = 0
What do you think?
- Alex 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20140205/47bbe2be/attachment.html>


More information about the Python-ideas mailing list