簡體   English   中英

高階 function 可在 python 中調用

[英]higher-order function callable in python

我有以下難以理解的代碼。 它定義了 2 個函數,然后將 function 分配給 h,但是 X 和 Y 是什么?


更多信息 def func_max(f: Callable[[int], int], g: Callable[[int], int])-> Callable[[int], int]:

將上述函數 f 和 g 作為參數。 它返回定義在整數 x 上的 function h(x) 和 integer x 上的 h 的返回值等於 m 和 n 的最大值,其中 m = f(x) 和 n = g(x)。

def f(x):
  return x**2
  
def g(x):
  return 5*x

h = max_func(f,g)
X = h(3)
Y = h(6)

該練習要求以正確的順序組裝以下內容,我會嘗試但它不起作用,這里是:

例如,我不明白小 x 現在如何發揮作用......

def max_func(f,g):
  if f(x)> g(x): #For example I don't understand how small x enters into play now...
    return f(x)```
  else:
   return f(x)
def new_function (x:int): -> int
   return new_function

max_func應該返回一個 function ,它接受一個參數( x ),將其應用於fg然后返回最大值:

def max_func(f, g):
    def mf(x):
        return max(f(x), g(x))
    return mf

高階函數式編程可以很快變得非常奇怪。 由於這似乎是一個家庭作業,我不會給你直接的答案,但考慮一下:

def make_function_print_arg(f):
  def new_function(x):
    print(f"Calling function with {x}")
    return f(x)
  return new_function

這定義了一個 function 修改它通過的 function。 我可以這樣使用它:

def square(x):
  return x**2

print_and_square = make_function_print_arg(square)
arg = 5
ret = print_and_square(arg) # Prints out "Calling function with 5"
print(f"{arg} squared is {ret}") # Prints out "5 squared is 25"

因此, make_function_print_arg是一個 function ,它以 function f作為參數。 在其體內,它定義了一個新的 function。 這個新的 function 采用單個參數,打印出該參數,然后使用該單個參數調用f 最后, make_function_print_arg返回它剛剛定義的新 function。

稍后,我們可以使用我們已經定義的 function 調用make_function_print_arg ,它返回一個新的 function ,這很像我們的舊 ZC1C425268E683854F1AB5074C17 行為,但有一些修改。

現在,在您的情況下,您要定義一個 function ,它采用兩個函數作為 arguments,調用它們,並返回更大的結果。 我很確定您需要解讀的其中一條線應該是return g(x) ,所以我認為您或您的老師打錯了,但要解決這個問題,看看您是否可以使用make_function_print_arg中的想法管理它!

對於您自己的教育,您可能還想了解裝飾器的工作原理,這與您現在正在學習的內容非常相似: https://book.pythontips.com/en/latest/decorators.html

在您的代碼中,您在 if 和 else 語句中都只調用 f(x) 。

你可以試試:

def max_func(f,g):
  if f(x)> g(x): 
    return f(x)
  else:
   return g(x)
def new_function (x:int): -> int
   return new_function

暫無
暫無

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

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