реализовать частично подобный модуль в Python - PullRequest
0 голосов
/ 18 ноября 2018

Я хочу реализовать фрагмент кода, который эквивалентен друг другу:

from inspect import getfullargspec
from functools import partial

def incomplete(func):
    global inputs
    global func_args
    func_args = len(getfullargspec(func)[0])
    def wrapper(*args):
        global inputs
        global func_args
        if len(args) < func_args:
            partial(func, args)
        else:
            return func(*args)
    return wrapper

@incomplete
def add(a, b):
    return a + b

add1 = add(1)

assert add1(2) == add(1, 2)

Моя проблема в том, что я должен вернуть функцию в первом операторе if, но функция не завершена, чтоизменения должны быть применены к приведенному ниже коду, чтобы они были эквивалентны?

from inspect import getfullargspec
from functools import partial

def incomplete(func):
    global inputs
    global func_args
    inputs = []
    func_args = len(getfullargspec(func)[0])
    def wrapper(*args):
        global inputs
        global func_args
        if len(inputs) < func_args:
            inputs += args
        else:
            return func(*args)
    return wrapper

@incomplete
def add(a, b):
    return a + b

add1 = add(1)

assert add1(2) == add(1, 2)

1 Ответ

0 голосов
/ 18 ноября 2018
from inspect import getfullargspec

def incomplete(func):
    global inputs
    global func_args
    inputs = []
    func_args = len(getfullargspec(func)[0])
    def wrapper(*args):
        global inputs
        global func_args
        inputs += args
        if len(inputs) < func_args:
            def partial(*argss):
                for i in argss:
                    inputs.append(i)
                if (len(inputs) == func_args):
                    return func(*inputs)
                else:
                    return partial
            return partial
        else:
            return func(*args)
    return wrapper

@incomplete
def add(a, b):
    return a + b

add1 = add(1)

assert add1(2) == add(1, 2)
...