簡體   English   中英

python將參數附加到函數調用

[英]python append args to function call

def one(*args):
    if len(args) == 0:
        return 1

    return args


def plus(*args):
    first_number = args[1]
    second_number = args[0]
    sum = first_number + second_number 
    return sum


def two(*args):
    if len(args) == 0:
        return 2
    
    return args


print(one(plus(two())))

問題是使用函數進行計算,它包含 3 個部分,第一個數字、運算和第二個數字,目標是對這兩個數字(第一部分和第三部分)進行運算(第二部分),例如one(plus(two()))應該返回 3

現在這是我不知道該怎么做的部分, plus()函數被調用,帶有一個參數two() one(plus(two()))我想添加第二個參數,即初始數字(第一個數字)函數 so plus()函數現在使用兩個args調用,例如plus(two(), 1)

現在plus(two())args[0]one()函數如何可以追加1args[0]使得函數這樣調用plus(two(), 1)到訪問它的內部plus()並且first_number = args[1]變為有效

下面的代碼實現了與示例類似的語法,但參數結構略有不同。 我認為這樣邏輯更清晰。

關鍵是我將plus定義為偏函數,以便它“吸收”兩個以形成一個用作“add_two”的函數。

def plus(number):
  def _plus(x):
    return x + number
  return _plus

def one(op=None):  
  if op is None:
    return 1  
  return op(1)

def two(op=None):
  if op is None:
    return 2
  return op(2)

one(plus(two()))
# 3

一種想法是讓plus返回一個函數,該函數隨后將被one two調用:

def one(*args):
    if len(args) == 0:
        return 1
    elif len(args) == 1:
        fn = args[0]
        return fn(1)
    else:
        raise ValueError("Invalid number of arguments")

def two(*args):
    if len(args) == 0:
        return 2
    elif len(args) == 1:
        fn = args[0]
        return fn(2)
    else:
        raise ValueError("Invalid number of arguments")


def plus(second_number):
    def adder(first_number):
        return first_number + second_number
    return adder

現在:

>>> one(plus(two()))
3
>>> one(plus(one()))
2
>>> two(plus(one()))
3
>>> two(plus(two()))
4

並簡化和干燥它:

def make_number(n):
    def number_fn(fn=None):
        if fn:
            return fn(n)
        else:
            return n
    return number_fn

def make_operator(operator):
    def operator_wrapper(second_number):
        def partial(first_number):
            return operator(first_number, second_number)
        return partial
    return operator_wrapper

one = make_number(1)
two = make_number(2)

plus = make_operator(lambda a, b: a + b)
minus = make_operator(lambda a, b: a - b)
>>> two(minus(one()))
1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM