Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2021 - online Python 3 training - see ((here)).

Our plans were to retire in summer 2020 and see the world, but Coronavirus has lead us into a lot of lockdown programming in Python 3 and PHP 7.
We can now offer tailored online training - small groups, real tutors - works really well for groups of 4 to 14 delegates. Anywhere in the world; course language English.

Please ask about private 'maintenance' training for Python 2, Tcl, Perl, PHP, Lua, etc.
Program for reliability and efficiency - do not duplicate, but rather share and re-use

When you're writing a new piece of code - especially if you're also quite new to programming - you'll be concentrating so much on getting it to work that you may not be giving too much thought to making it easy look after your code later on (maintainance), nor to sharing a piece of code between programs. But in the medium and longterm, if you can avoid duplicating code you'll be saving yourself and you colleagues a lot of time and effort!

• If you find yourself copying and pasting a block of code, there's probably an easier way!

• If you duplicate a block of code, but then alter a few elements, don't say "that's not a duplicate" - say "I have identified which values will be parameters to a function"

I have an example here from a Python course at the start of last week. Look at this code:


while True:
        him = int(raw_input("How many years old is he? "))
        if him < 0 or him > 119:
                continue
        break
 
while True:
        her = int(raw_input("How many years old is she? "))
        if her < 0 or her > 119:
                continue
        break


It's almost exactly the same block of code - just the prompt and the result variable are changed, and a good case to make a named block of code. This is Python, so we used "def" but it could have been sub in Perl, function in PHP, or proc in Tcl.

The function code has to be defined before it is called - here's my example:


def getage(person_word):
    while True:
        question = "How many years old is " + person_word + "? "
        age = int(raw_input(question))
        if age < 0 or age > 119:
            continue
        break
    return age


That does not run the code - it just defines it. You then call it by name, passing in the string that contains the person_word, and returning the result to another variable:

him = getage("he")
her = getage("she")


Taking that a step further, you'll want to share the code between programs. You can do that by putting your defined function into a shared file (usually alongside other functions that are to be shared) which you will then pull in as required in some way. In Perl, that would be a use or a require, in Tcl it would be a source, and in Python it would be a from or an import.

Structure your code well using these techniques - not only will you find you're making huge time savings in the long term, but you'll find that you're also wring more consistent and reliable programs - and that the benefits come in the short term too. Did I tell you that by naming a block of code, you provide a unit of code that's much easier to test and debug ... with a built in test routine and documentation too!


Full source code links:

Control case with repeated code
Re-use within the same source file
Separated out for sharing with other programs and the shared file

Illustrations - delegates on last week's Python Course
(written 2010-07-19, updated 2010-07-30)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y105 - Python - Functions, Modules and Packages
  [96] Variable Scope - (2004-10-22)
  [105] Distance Learning - (2004-10-31)
  [294] Python generator functions, lambdas, and iterators - (2005-04-28)
  [303] Lambdas in Python - (2005-05-06)
  [308] Call by name v call by value - (2005-05-11)
  [340] Code and code maintainance efficiency - (2005-06-08)
  [386] What is a callback? - (2005-07-22)
  [418] Difference between import and from in Python - (2005-08-18)
  [561] Python's Generator functions - (2006-01-11)
  [668] Python - block insets help with documentation - (2006-04-04)
  [745] Python modules. The distribution, The Cheese Shop and the Vaults of Parnassus. - (2006-06-05)
  [749] Cottage industry or production line data handling methods - (2006-06-07)
  [775] Do not duplicate your code - (2006-06-23)
  [821] Dynamic functions and names - Python - (2006-08-03)
  [900] Python - function v method - (2006-10-20)
  [912] Recursion in Python - (2006-11-02)
  [913] Python - A list of methods - (2006-11-03)
  [949] Sludge off the mountain, and Python and PHP - (2006-11-27)
  [959] It's the 1st, not the 1nd 1rd or 1th. - (2006-12-01)
  [1134] Function / method parameters with * and ** in Python - (2007-04-04)
  [1163] A better alternative to cutting and pasting code - (2007-04-26)
  [1202] Returning multiple values from a function (Perl, PHP, Python) - (2007-05-24)
  [1464] Python Script - easy examples of lots of basics - (2007-12-08)
  [1784] Global - Tcl, PHP, Python - (2008-09-03)
  [1790] Sharing variables with functions, but keeping them local too - Python - (2008-09-09)
  [1869] Anonymous functions (lambdas) and map in Python - (2008-11-04)
  [1870] What to do with a huge crop of apples - (2008-11-04)
  [1871] Optional and named parameters in Python - (2008-11-05)
  [1879] Dynamic code - Python - (2008-11-11)
  [2011] Conversion of OSI grid references to Eastings and Northings - (2009-01-28)
  [2439] Multiple returns from a function in Python - (2009-10-06)
  [2440] Optional parameters to Python functions - (2009-10-07)
  [2481] Sample code with errors in it on our web site - (2009-10-29)
  [2506] Good example of recursion in Python - analyse an RSS feed - (2009-11-18)
  [2520] Global and Enable - two misused words! - (2009-11-30)
  [2718] Python - access to variables in the outer scope - (2010-04-12)
  [2766] Optional and named parameters to Python functions/methods - (2010-05-15)
  [2929] Passing a variable number of parameters in to a function / method - (2010-08-20)
  [2994] Python - some common questions answered in code examples - (2010-10-10)
  [2998] Using an exception to initialise a static variable in a Python function / method - (2010-10-13)
  [3159] Returning multiple values from a function call in various languages - a comparison - (2011-02-06)
  [3280] Passing parameters to Python functions - the options you have - (2011-05-07)
  [3459] Catching the fishes first? - (2011-09-27)
  [3464] Passing optional and named parameters to python methods - (2011-10-04)
  [3472] Static variables in functions - and better ways using objects - (2011-10-10)
  [3474] Python Packages - groupings of modules. An introduction - (2011-10-11)
  [3662] Finding all the unique lines in a file, using Python or Perl - (2012-03-20)
  [3695] Functions are first class variables in Lua and Python - (2012-04-13)
  [3766] Python timing - when to use a list, and when to use a generator - (2012-06-16)
  [3852] Static variables in Python? - (2012-08-29)
  [3885] Default local - a good choice by the author of Python - (2012-10-08)
  [3931] Optional positional and named parameters in Python - (2012-11-23)
  [3945] vargs in Python - how to call a method with unknown number of parameters - (2012-12-06)
  [4029] Exception, Lambda, Generator, Slice, Dict - examples in one Python program - (2013-03-04)
  [4161] Python varables - checking existance, and call by name or by value? - (2013-08-27)
  [4212] Python functions - an introduction to how they work - (2013-11-16)
  [4361] Multiple yields and no loops in a Python generator? - (2014-12-22)
  [4407] Python - even named code blocks are objects - (2015-01-28)
  [4410] A good example of recursion - a real use in Python - (2015-02-01)
  [4441] Reading command line parameters in Python - (2015-02-23)
  [4448] What is the difference between a function and a method? - (2015-03-04)
  [4645] What are callbacks? Why use them? An example in Python - (2016-02-11)
  [4662] Recursion in Python - the classic example - (2016-03-07)
  [4719] Nesting decorators - (2016-11-02)
  [4722] Embedding more complex code into a named block - (2016-11-04)
  [4724] From and Import in Python - where is the module loaded from? - (2016-11-06)

Q907 - Object Orientation and General technical topics - Object Orientation: Design Techniques
  [80] OO - real benefits - (2004-10-09)
  [236] Tapping in on resources - (2005-03-05)
  [507] Introduction to Object Oriented Programming - (2005-11-27)
  [534] Design - one name, one action - (2005-12-19)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [747] The Fag Packet Design Methodology - (2006-06-06)
  [831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
  [836] Build on what you already have with OO - (2006-08-17)
  [1047] Maintainable code - some positive advice - (2007-01-21)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [1224] Object Relation Mapping (ORM) - (2007-06-09)
  [1435] Object Oriented Programming in Perl - Course - (2007-11-18)
  [1528] Object Oriented Tcl - (2008-02-02)
  [1538] Teaching Object Oriented Java with Students and Ice Cream - (2008-02-12)
  [2169] When should I use OO techniques? - (2009-05-11)
  [2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
  [2327] Planning! - (2009-08-08)
  [2380] Object Oriented programming - a practical design example - (2009-08-27)
  [2501] Simples - (2009-11-12)
  [2523] Plan your application before you start - (2009-12-02)
  [2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
  [2741] What is a factory? - (2010-04-26)
  [2747] Containment, Associative Objects, Inheritance, packages and modules - (2010-04-30)
  [2785] The Light bulb moment when people see how Object Orientation works in real use - (2010-05-28)
  [2865] Relationships between Java classes - inheritance, packaging and others - (2010-07-10)
  [2889] Should Python classes each be in their own file? - (2010-07-27)
  [2953] Turning an exercise into the real thing with extreme programming - (2010-09-11)
  [2977] What is a factory method and why use one? - Example in Ruby - (2010-09-30)
  [3063] Comments in and on Perl - a case for extreme OO programming - (2010-11-21)
  [3085] Object Oriented Programming for Structured Programmers - conversion training - (2010-12-14)
  [3260] Ruby - a training example that puts many language elements together to demonstrate the whole - (2011-04-23)
  [3454] Your PHP website - how to factor and refactor to reduce growing pains - (2011-09-24)
  [3607] Designing your application - using UML techniques - (2012-02-11)
  [3760] Why you should use objects even for short data manipulation programs in Ruby - (2012-06-10)
  [3763] Spike solutions and refactoring - a Python example - (2012-06-13)
  [3798] When you should use Object Orientation even in a short program - Python example - (2012-07-06)
  [3844] Rooms ready for guests - each time, every time, thanks to good system design - (2012-08-20)
  [3878] From Structured to Object Oriented Programming. - (2012-10-02)
  [3887] Inheritance, Composition and Associated objects - when to use which - Python example - (2012-10-10)
  [3928] Storing your intermediate data - what format should you you choose? - (2012-11-20)
  [3978] Teaching OO - how to avoid lots of window switching early on - (2013-01-17)
  [4098] Using object orientation for non-physical objects - (2013-05-22)
  [4374] Test driven development, and class design, from first principles (using C++) - (2014-12-30)
  [4430] The spirit of Java - delegating to classes - (2015-02-18)
  [4449] Spike solution, refactoring into encapsulated object methods - good design practise - (2015-03-05)
  [4628] Associative objects - one object within another. - (2016-01-20)

Q101 - Object Orientation and General technical topics - Programming Principles
  [2001] I have not programmed before, and need to learn - (2009-01-19)
  [2022] Pre and post increment - the ++ operator - (2009-02-03)
  [2228] Where do I start when writing a program? - (2009-06-11)
  [2310] Learning to write high quality code in Lua - (2009-07-30)
  [2415] Variable names like i and j - why? - (2009-09-22)
  [2510] The music of the stock market - (2009-11-22)
  [2550] Do not copy and paste code - there are much better ways - (2009-12-26)
  [2586] And and Or illustrated by locks - (2010-01-17)
  [2737] Improving your function calls (APIs) - General and PHP - (2010-04-24)
  [2769] Easy - but for whom? - (2010-05-18)
  [2915] Looking up a value by key - associative arrays / Hashes / Dictionaries - (2010-08-11)
  [2964] An introduction to file handling in programs - buffering, standard in and out, and file handles - (2010-09-21)
  [3026] Coding efficiency - do not repeat yourself! - (2010-11-02)
  [3456] Stepping stones - early coding, and writing re-usable code quickly - (2011-09-24)
  [3542] What order are operations performed in, in a Perl expression? - (2011-12-07)
  [3548] Dark mornings, dog update, and Python and Lua courses before Christmas - (2011-12-10)
  [3551] Some terms used in programming (Biased towards Python) - (2011-12-12)
  [3673] Object oriented or structured - a comparison in Python. Also writing clean regular expressions - (2012-03-26)
  [3954] Lesson 1 in programing - write clean, reuseable and maintainable tidy code - (2012-12-16)
  [4003] Web and console - same principle, same code - Ruby example - (2013-02-14)
  [4061] Seamless, integrated IT - we have a long way to go! - (2013-04-11)
  [4090] Test Driven Development in Python - Customer Comes First - (2013-05-16)
  [4118] We not only teach PHP and Python - we teach good PHP and Python Practice! - (2013-06-18)
  [4153] Rooms available tonight - how to code an algorithm from first principles - (2013-08-19)
  [4206] Writing the perfect program in Tcl? - (2013-11-13)
  [4325] Learning to program - what are algorithms and design patterns? - (2014-11-22)
  [4611] Hungarian, Camel, Snake and Kebab - variable naming conventions - (2016-01-03)
  [4632] Remember to ask the question before you listen for the answer - (2016-01-26)


Back to
Further more advanced Perl examples
Previous and next
or
Horse's mouth home
Forward to
Night Porter and reception - 24 hours a day?
Some other Articles
Seeing Wiltshire - from a Melksham base
Tailoring of courses to meet customers needs - how it works
Getting in touch - Please allow me to see you when you are online
Night Porter and reception - 24 hours a day?
Program for reliability and efficiency - do not duplicate, but rather share and re-use
Further more advanced Perl examples
Different perl examples - some corners I rarely explore
A long day in Melksham ...
Unpacking a Perl string into a list
Another toot of the trumpet
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2021: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2878_Pro ... e-use.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb