【问题标题】:Python Dictionaries: Running Custom FunctionsPython 字典:运行自定义函数
【发布时间】:2018-07-18 15:45:56
【问题描述】:

请协助我完成以下工作。我在 Stack 上遇到了一些类似的问题,但提供的示例并没有解决我遇到的问题。

在下面的字典中,我想在用户键入“选项 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 语句。

【问题讨论】:

    标签: python python-3.x switch-statement case


    【解决方案1】:

    您可以在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 下的字符串值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2012-08-15
    • 2019-12-16
    • 2023-04-08
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多