Decorator
muru kessan
murukessanap at gmail.com
Thu Mar 20 05:19:55 EDT 2014
Hi guys,
Is there a difference between accessing decorators via '@' symbol and
hard coding that ? esp when the function passed to the decorator is a
recursive one?
See attachments
result from deco_with@ is
1 1 0 1 1 0 1 1 0
result from deco_without@ is
1 1 2 3 5 8 13 21 34
1 1 0 3 5 0 13 21 0
Thanks ,
muru
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20140320/2fcdb3a0/attachment.html>
-------------- next part --------------
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Ratna
#
# Created: 20/03/2014
# Copyright: (c) Ratna 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
import math
def isOddMy(func):
def innerOdd(x):
y = func(x)
if math.fmod(y, 2) == 0 :
return 0
else:
if y is not None:
return y
else:
return 0
return innerOdd
@isOddMy
def fib(n):
#print n,
if n == 0 :
return 0
elif n == 1 :
return 1
else:
return fib(n-2) + fib(n-1)
def main():
#oddFibi = isOdd(fib)
#print [i for i in oddFibi(100)]
for i in range(1,10):
print fib(i),
'''print
fib1 = isOddMy(fib)
for i in range(1,10):
print fib1(i),'''
if __name__ == '__main__':
main()
-------------- next part --------------
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Ratna
#
# Created: 20/03/2014
# Copyright: (c) Ratna 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
import math
def isOddMy(func):
def innerOdd(x):
y = func(x)
if math.fmod(y, 2) == 0 :
return 0
else:
if y is not None:
return y
else:
return 0
return innerOdd
#@isOddMy
def fib(n):
#print n,
if n == 0 :
return 0
elif n == 1 :
return 1
else:
return fib(n-2) + fib(n-1)
def main():
#oddFibi = isOdd(fib)
#print [i for i in oddFibi(100)]
for i in range(1,10):
print fib(i),
print
fib1 = isOddMy(fib)
for i in range(1,10):
print fib1(i),
if __name__ == '__main__':
main()
More information about the Python-list
mailing list