如何在循环Python中调用不同的函数

问题描述 投票:2回答:3

这是关于Raspberry PI,但在这种情况下,它并不重要。我有9个功能,如:

for_1..9()

这些功能可打开4位LED显示屏的一部分。但我想在这个显示器上为每个数字使用一个按钮,所以每次按下按钮时我想调用不同的功能。不知道它怎么可能。

函数看起来像这样:

def for_1():
    GPIO.output(15.HIGH)
    GPIO.output(18.HIGH)
    ....

像这样的Smth:

if Pin.input(number of pin):
    for i in range(0, 9):
        for_1()
        #next time in loop has to be next function
python algorithm loops
3个回答
0
投票

试试这个:

if Pin.input(number of pin):
    for i in range(0, 9):
        globals()['for_'+str(i)]()

要么

if Pin.input(number of pin):
    for i in range(0, 9):
        locals()['for_'+str(i)]()

4
投票

你可以把函数放在像这样的迭代中

def f():
    return 1

def g():
    return 2

for fn in [f, g]:
    print(fn())
# 1
# 2

只需将所需的函数放在一个可以迭代的容器中,然后调用它们即可。


2
投票

您可以使用动态方式为不同的迭代周期调用每个函数。

  • 定义所有函数,例如for_1 ... for_9
  • 将定义这些函数的文件导入主脚本
  • 使用python的getattr来获取函数并最终调用它。

以下代码假定函数和迭代逻辑位于同一模块中。但是,您可以在单独的文件中定义函数,并将它们导入迭代逻辑脚本中。

import sys

thismodule = sys.modules[__name__] #This fetches the current module refrence

def for_1():
   return 1

for i in range(1, 10):
    func = getattr(thismodule, "for_{}".format(i))
    func() #This will invoke for_1 ... for_9
© www.soinside.com 2019 - 2024. All rights reserved.