Python字典:运行自定义函数

Python字典:运行自定义函数,python,python-3.x,switch-statement,case,Python,Python 3.x,Switch Statement,Case,请在以下方面帮助我。我已经讨论了堆栈上的一些类似问题,但提供的示例并没有解决我遇到的问题 在下面的字典中,我想在用户键入“选项1”时运行一个自定义函数 在当前设置中,自定义函数writeFunction()是 无论用户选择哪个选项都会执行 选择“选项1”时的输出: 此功能有效 没有 选择“选项2”时的输出: 此功能有效 答复2 如果我将选项1更改为字符串值,它将完美执行。我到底做错了什么 # Custom Function def writeFunction(): print("

请在以下方面帮助我。我已经讨论了堆栈上的一些类似问题,但提供的示例并没有解决我遇到的问题

在下面的字典中,我想在用户键入“选项1”时运行一个自定义函数

在当前设置中,自定义函数writeFunction()是 无论用户选择哪个选项都会执行

选择“选项1”时的输出:

  • 此功能有效
  • 没有
选择“选项2”时的输出:

  • 此功能有效
  • 答复2
如果我将选项1更改为字符串值,它将完美执行。我到底做错了什么

# Custom Function
def writeFunction():
    print("This function works")

# Case statement
def case(arg):
    switch = {
        'Option 1':writeFunction(),
        'Option 2':'Answer 2',
        'Option 3':'Answer 3'
    }
    sysResponse = switch.get(arg,"Value not in list")
    print(sysResponse)

# User selection
userSelection = input("Please select option 1 to 3: ")

# Run case statement based on user selection
case(userSelection)

我希望避免使用无休止的elif语句。

您可以在dict中引用函数(注意
writeFunction
之后缺少
()
),然后检查您检索到
sysResponse
的对象是否可调用;如果是,则调用它以替换实际值

如果
writeFunction
有副作用或执行速度慢,那么只有选择了它,才会执行

switch = {
    'Option 1': writeFunction,
    'Option 2': 'Answer 2',
    'Option 3': 'Answer 3'
}
sysResponse = switch.get(arg, "Value not in list")
if callable(sysResponse):
    sysResponse = sysResponse()

为保持一致性,其他选项可以使用
lambda:'Answer X'
?(还应更改函数以返回字符串,否则它会将
None
标记为
sysResponse
)这非常有效!!!非常感谢你。刚刚添加了else:print(sysResponse)以返回选项2和3下的字符串值。