簡體   English   中英

是否可以將 function 及其 arguments 存儲在變量中?

[英]Is it possible to store a function and its arguments in a variable?

我已經看到很多關於將函數存儲在變量中以供執行的信息,但顯示的函數始終是:

def foo():
  print("Hello")
x = foo
x()

種類。 是否可以存儲 function 及其變量以供以后執行? 我目前通過創建一個元組來解決這個問題,其中 function 作為第一項,變量作為第二項的嵌套元組,然后調用:

menu_input[KEY_D] = action_system.drop_item, (character,))
...LATER IN CODE...
for key in current_input:
  if key in menu.menu_input.keys():
    func, args = menu.menu_input[keys]
    func(*args)

但我真的更希望能夠將 function 及其變量一起存儲。

我希望能夠存儲:

menu_input[KEY_D] = action_system.drop_item(character)
...LATER IN CODE...
for key in current_input:
  if key in menu.menu_input.keys():
    menu.menu_input[keys]()

因為處理菜單輸入的function不理解或關心菜單function本身,所以真的不需要看輸入或關心傳遞的arguments。

這可能嗎? 如果是這樣,我錯過了什么? 抱歉,如果這很明顯或顯然是個壞主意——對於 python 來說相對較新。 如果這是一個糟糕的主意,我很想知道為什么。 我避免將此設置為菜單項的 class function 因為我正在嘗試在實體組件系統 model 中工作,組件存儲所有數據和系統在它們上運行。

functools.partial function 是為此目的而制作的:

from functools import partial
menu_input[KEY_D] = partial(action_system.drop_item, character)
...
for key in current_input:
    if key in menu.menu_input:
        menu.menu_input[key]()

您可以選擇使用沒有 arguments 的 lambda 表達式。

def foo(value):
  print(value)
x = lambda : foo("Hello")
x()

暫無
暫無

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

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