簡體   English   中英

如何調用 function 其名稱由用戶通過 Python 字典 w/o if-elif 語句給出

[英]How to call a function whose name is given by the user through Python dictionary w/o if-elif statements

我正在嘗試編寫一個程序,向用戶請求命令和一堆 arguments 並執行它。 此外,嘗試通過使用 python 字典來提高效率。 這是我的代碼:

command, *args = input().split()
args = list(map(int, args))
options = {'a': print(args[0]),
           'b': print(args[1]),
          }
options.get(command)

但是,當我在輸入中輸入'a 1 2'時,程序會同時編譯命令 a命令 b 這是為什么? 我可以修好嗎? 先感謝您!

正如有人指出的那樣,您可以使用eval 然而,更好的方法是將函數作為值傳遞到字典中並在檢索期間調用它們。 最簡單的方法是使用lambda創建一個簡單的內聯 function。

使用您的代碼,這將類似於:

command, *args = input().split()
args = list(map(int, args))
options = {'a': lambda args: print(args[0]),
           'b': lambda args: print(args[1]),
          }
options.get(command)(args)

如果您不熟悉 lambda 表達式,它只是創建簡單函數的一種更簡單的方法。 例如lambda args: print(args[1])評估為

def func(args):
    print(args[1])

您的問題可以通過以下方式回答:

command, *args = input().split()
args = list(map(int, args))
options = {'a': (print, args[0]),
           'b': (print, args[1]),
          }

func, arg = options.get(command)
func(arg)

現在,輸入b 123 23 23只打印 23。

暫無
暫無

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

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