A decorator is a design pattern in Python that allows a user to add new functionality to an existing object without modifying ...
- A decorator is a design pattern in Python that allows a user to add new functionality to an existing object without modifying its structure.
- Decorators are usually called before the definition of a function you want to decorate.
- This is also called metaprogramming as a part of the program tries to modify another part of the program at compile time.
- two different kinds of decorators in Python:
- Function decorators
- Class decorators
def input_decorator(func):
def input_number():
nth_number = int(input("How many number do you want to enter.\n"))
legal_number = []
illegal_number = []
for i in range(nth_number):
number = input("Enter number : ")
if float(number)<=0 or '.' in number:
illegal_number.append(number)
else:
legal_number.append(int(number))
list_of_legal_and_illegal_number = [legal_number,illegal_number]
return func(list_of_legal_and_illegal_number)
return input_number
def grouping_decorator(func):
def numbers_test(args):
odd = []
even = []
prime = []
composite = []
for i in args[0]:
if i%2!=0:
odd.append(i)
else:
even.append(i)
for i in odd:
if i == 1:
continue
elif i==3 or i==5 or i==7:
prime.append(i)
else:
if i%3!=0 and i%5!=0 and i%7!=0:
prime.append(i)
else:
composite.append(i)
for i in even:
if i==2:
prime.append(i)
else:
composite.append(i)
composite.sort()
prime.sort()
list_of=[odd,even, prime, composite]
invalid_number = args[1]
return func(list_of,invalid_number)
return numbers_test
@input_decorator
@grouping_decorator
def mean_calculator(args,args1):
a=','.join(args1)
print("Invalid numbers : ", a)
if not args[0]:
print('no odd')
else:
print("Mean of odd numbers : ",sum(args[0])/len(args[0]))
if not args[1]:
print('no even')
else:
print("Mean of even numbers : ",sum(args[1])/len(args[1]))
if not args[2]:
print('no prime')
else:
print("Mean of prime numbers : ",sum(args[2])/len(args[2]))
if not args[3]:
print('no composite')
else:
print("Mean of composite numbers : ",sum(args[3])/len(args[3]))
mean_calculator()
COMMENTS