[Python-ideas] Inline Functions - idea
Ned Batchelder
ned at nedbatchelder.com
Wed Feb 5 16:22:01 CET 2014
On 2/5/14 9:32 AM, Alex Rodrigues wrote:
> 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 function
> def 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 function
> def 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?
>
In Python 3:
def main():
def saveLine():
nonlocal counter
slipL = abs(frontL - backL)
slipR = abs(frontR - backR)
file.write('Speeds: ('+frontL+', '+frontR+', '+backL+',
'+backR+'), \n Slip: '+slipL+', '+slipR)
counter = 0
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)
> - Alex
>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20140205/8ba4ee58/attachment-0001.html>
More information about the Python-ideas
mailing list