[英]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()
函數如何可以追加1
到args[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.