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()))我想第二個引數的初始數量(第一號)添加到功能,所以plus()功能現在被稱為有兩個args這樣的plus(two(), 1)。
現在plus(two())是args[0]內部one()函式,我如何附加1到它,args[0]以便像這樣呼叫該函式以plus(two(), 1)在內部訪問它plus()并first_number = args[1]變得有效
uj5u.com熱心網友回復:
下面的代碼實作了與示例類似的語法,但引數結構略有不同。我認為這樣邏輯更清晰。
關鍵是我定義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
uj5u.com熱心網友回復:
一個想法是plus回傳一個函式,該函式隨后將被oneor呼叫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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/346253.html
