Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
Python varables - checking existance, and call by name or by value?

A couple of good questions from a recent delegate...

Q. How do I check for the existance of a variable in Python?

A. Reference it and see if an exception is thrown. Here's an example in which I create a variable only if my program is run with command line parameters:

  import sys
  if len(sys.argv) > 1:
    thing = "Called with parameters"
  
  try:
    thing
    have = "something"
  except:
    have = "nothing"
  print have


And running that gives me:

  WomanWithCat:twcrp grahamellis$ python pval qweqeqwe
  something
  WomanWithCat:twcrp grahamellis$ python pval
  nothing
  WomanWithCat:twcrp grahamellis$


If you don't like exceptions (!), you could always try the dir function which returns you symbol table contents...

  if "thing" in dir():
    print "have"
  else:
    print "have not"


The question concerns me slightly - as it's usually good coding practise to know what variables you have, and to clean up optional temporary ones at the closure of a scope.

Q. Python subroutine calls, are they "by value" or "by reference" or both?

A. They are called by reference. Which means that the address at which a variable id held is passed into the method / function (they're not really called "subroutines") and it's very efficient in that way. It also means that if you make changes within the variable's contents inside the method, you'll also change what the reference outside the function considers to be a value. Consider the internal name to be an alternative name or alias for the same thing.

  def employ(team,add):
    team.append(add)
  def unemploy(team, subtract):
    team.remove(subtract)
  
  people = ["Amanda","Bob","Chris","Deborah"]
  employ(people,"Eric")
  unemploy(people,"Bob")
  print people


And that runs as follows - with the changes show within the methods reflcted outside

  WomanWithCat:twcrp grahamellis$ python pin
  ['Amanda', 'Chris', 'Deborah', 'Eric']
  WomanWithCat:twcrp grahamellis$


There is, however, a further issue to consider - my correspondent writes:

"Here I am getting confused, looks like list is by-reference and integer is by-value. What rule is Python following?"

It's by REFERENCE. However, some variables (tuples and integers for example) are immutable and that means that when their value is altered a new variable / reference name is created. And if that's just under the alias name,it leaves the original name pointing to the original value, thus giving the appearance of call be value.

You can see how that works using Python's id function ...

  def stepup(thisval):
    print id(thisval)
    thisval += 1
    print id(thisval)
  
  lucky = 7
  print id(lucky)
  print lucky
  stepup(lucky)
  print id(lucky)
  print lucky


Which reports a brand new object after the += operation ... but ONLY at that point:

  4352717096
  7
  4352717096
  4352717072
  4352717096
  7


Using a list with a single member, you can get the opposite behaviour:

  4499263856
  [7]
  4499263856
  4499263856
  4499263856
  [8]

(written 2013-08-27, updated 2013-08-31)

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

Y109 - Python - Exceptions
  [4444] Elements of an exception in Python - try, except, else, finally - (2015-02-28)
  [3930] Reporting the full stack trace when you catch a Python exception - (2012-11-22)
  [3913] How many times ... has this loco headed west through Tenby? - Python exceptions - (2012-11-05)
  [3664] Error checking in a Python program - making your program robust via exceptions - (2012-03-22)
  [3441] Pressing ^C in a Python program. Also Progress Bar. - (2011-09-15)
  [3433] Exceptions - a fail-safe way of trapping things that may go wrong - (2011-09-11)
  [3177] Insurance against any errors - Volcanoes and Python - (2011-02-19)
  [2622] Handling unusual and error conditions - exceptions - (2010-02-03)
  [2408] Robust user input (exception handling) example in Python - (2009-09-17)
  [2368] Python - fresh examples of all the fundamentals - (2009-08-20)
  [2281] Python - using exceptions to set a fallback - (2009-07-12)
  [2018] UnboundLocalError - Python Message - (2009-01-31)
  [1236] Trying things in Python - (2007-06-18)
  [1042] Nested exceptions in Python - (2007-01-18)
  [381] Exceptions in Python - (2005-07-17)


Back to
Bank Holiday Monday - pictures of a great train trip to Weymouth
Previous and next
or
Horse's mouth home
Forward to
Pimms and Croquet at Well House Manor - 7th September 2013
Some other Articles
Improving travel advise information in Wiltshire
Melksham Market - every Tuesday
TransWilts Community Rail Partnership - formally constituted
Pimms and Croquet at Well House Manor - 7th September 2013
Python varables - checking existance, and call by name or by value?
Bank Holiday Monday - pictures of a great train trip to Weymouth
People WILL walk to the station in Melksham, but they need a path and trains
Wedding from Well House Manor - an excellent base in Melksham
Wedding Photos - Kim Ellis to Kyle Londors, 22nd August 2013
A further chance to see Melksham on TV
4724 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 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., 2017: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 793803 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/4161_Pyt ... alue-.html • PAGE BUILT: Sat Jun 11 12:16:26 2016 • BUILD SYSTEM: WomanWithCat