Dekoratoriai atsakymai - robotautas/kursas GitHub Wiki

Dekoratorių užduočių atsakymai:

1

def args_limited(func):
    def wrapper(*args, **kwargs):
        if (len(args) + len(kwargs)) > 2:
            return "Too many arguments"
        return func(*args, **kwargs)

    return wrapper

2

def strings_only(func):
    def wrapper(*args, **kwargs):
        for arg in args:
            if not type(arg) is str:
                return "All args must be of type string!"
        for kwarg in kwargs.values():
            if not type(kwarg) is str:
                return "All kwargs must be of type string!"
        return func(*args, **kwargs)

    return wrapper

3 (visa programa):

import requests
from functools import wraps
from time import time


def speed_test(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time()
        result = func(*args, **kwargs)
        end_time = time()
        runtime = end_time - start_time
        print(f"Function's '{func.__name__}', with given parameters {args}, {kwargs} runtime: {round(runtime, 2)}s")
        return result

    return wrapper


@speed_test
def get_status(website):
    r = requests.get(website)
    return r.status_code


@speed_test
def prime_finder(given_range):
    final_list = []
    for num in range(2, given_range):
        for i in range(2, num):
            if num % i == 0:
                break
        else:
            final_list.append(num)
    return final_list


# print(get_status('http://python.org'))
# print(prime_finder(100000))