On Fri, Sep 27, 2013 at 10:07:39PM +0800, bharath ks wrote: > Hello, > > May i know why object 'c' does not prompt for employee name and > employee id in the following code i get out put asĀ
Default values in Python functions and methods are evaluated once only, when the function or method is defined ("compile time"), not each time it is run. You can test this yourself: import time def long_function(): # Simulate a long-running calculation print("Calculation started at %s" % time.ctime()) time.sleep(30) print("Calculation completed at %s" % time.ctime()) return 42 def test(value=long_function()): print(value) If you run this code, as I did, you will get something like: py> def test(value=long_function()): ... print(value) ... Calculation started at Sat Sep 28 14:37:38 2013 Calculation completed at Sat Sep 28 14:38:08 2013 only once, when the test function is created. Then, you can run that function as often as you like without the lengthy calculation being repeated: py> test() 42 py> test() 42 py> test(23) 23 py> test() 42 This is called "eager evaluation of default arguments", as opposed to "lazy evaluation of default arguments". To get lazy evaluation, stick the code inside the function, with a sentinel value: py> def test2(value=None): ... if value is None: ... value = long_function() ... print(value) ... py> test2() Calculation started at Sat Sep 28 14:41:08 2013 Calculation completed at Sat Sep 28 14:41:38 2013 42 py> test2(23) 23 py> test2() Calculation started at Sat Sep 28 14:42:13 2013 Calculation completed at Sat Sep 28 14:42:43 2013 42 -- Steven _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor