【问题标题】:I need to call a python function using a variable我需要使用变量调用 python 函数
【发布时间】:2020-12-06 23:09:46
【问题描述】:

我需要根据字符串变量的值调用函数。

mystrvar = 'a'

def a():
  print("Hello, world!")

mystrvar()

在该示例中,我希望调用函数 a(),因为这是 mystrvar 的值。

希望这是有道理的:)

【问题讨论】:

标签: python function variables call


【解决方案1】:

这种类型的问题在 StackOverflow 上经常出现,而且通常是由于人们没有真正理解数据和代码之间的区别。

您通常不希望您的程序的用户必须知道程序的代码才能使用它。

因此,与其在输入字符串 'a' 时神奇地调用 a(),不如明确编码将在输入 'a' 时调用 a()

下面是一些解释差异的代码:

def a():
    print('running a')


def b():
    print('running b')


def c():
    print('this should not be run!')


choice = input('a or b?')
if choice == 'a':
    a()
elif choice == 'b':
    b()

choice = input('a or b?')
eval(f'{choice}()')

请注意只有'a''b' 在第一个提示后执行某些操作,但您可以在第二个提示中输入'c',即使您只希望用户运行ab .

更糟糕的是,如果用户输入 wipe_my_c_drive 而你恰好有一个函数可以做到这一点,你认为会发生什么?

另外,如果您稍后将您的函数 a() 替换为一个名为 new_a() 的新函数,如果您使用第一种方法,您的程序可以为您的用户同样工作,而第二种方法需要您的用户知道名称变了。

【讨论】:

  • 很好的答案,但不是多个if 语句,我会使用{'a':a,'b':b} 的字典,因为它可以更好地扩展并且更容易更新,如果你曾经也可以传递该字典需要。
  • 同意@JeffUK - 但我认为有人正在努力解决尚未找到eval() 的此类问题,可能还需要了解dict。但是你说得对,在 if .. elif .. else .. 结构中维护多个选项是一种不符合几个选项的坏习惯。
【解决方案2】:

您的代码很好,唯一的问题是当您尝试调用该函数时,mystrvar 是一个字符串。相反,它应该等于该函数的名称,因为函数是数据类型,如果您将 mystrvar 设置为等于函数名称,您就是在告诉它,当您调用 mystrvar 时,您正在调用 a()

在下面的示例中,首先执行 a() 函数,然后执行 b()

def a():
    print('Hi')

def b():
    print('Hello world')

myfunctionvar = a

myfunctionvar()

myfunctionvar = b

myfunctionvar()

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2023-03-29
    • 2016-06-15
    • 2012-02-09
    • 1970-01-01
    相关资源
    最近更新 更多