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 - [email protected]
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor