使用用户输入设置属性
Using user input to set attribute
免责声明:我已经搜索了几天,运气不佳。尽管如此,如果某处已经有了答案,我将不胜感激任何人指点我。
我一直在玩弄 RPi.GPIO 和 python(目前是 3.6),但在设置某些属性时遇到了一个小问题。我一直在尝试找到一种使用用户输入来设置属性的方法,方法如下:
mode = input("Enter preferred mode (BCM/BOARD): ").upper()
mode_chosen = "GPIO." + mode
setattr(GPIO, "setmode", mode_chosen)
显然,上面的代码将属性设置为GPIO.BCM
或GPIO.BOARD
作为字符串,这当然是行不通的。我可以编写一个 if-else 循环来调用 GPIO.setmode(GPIO.whatever)
,具体取决于用户输入,但我想知道是否有更优雅的方法。
我对 python 比较陌生,所以我可能在这里遗漏了一些重要信息,所以...提前感谢任何花时间回答的人。
您可以使用getattr
从GPIO模块获取属性,然后在setattr
中使用:
mode = input("Enter preferred mode (BCM/BOARD): ").upper()
mode_chosen = getattr(GPIO, mode)
setattr(GPIO, "setmode", mode_chosen)
一种方法是使用字典:
choices = { "BCM": GPIO.BCM, "BOARD": GPIO.BOARD }
mode_chosen = choices[mode]
免责声明:我已经搜索了几天,运气不佳。尽管如此,如果某处已经有了答案,我将不胜感激任何人指点我。
我一直在玩弄 RPi.GPIO 和 python(目前是 3.6),但在设置某些属性时遇到了一个小问题。我一直在尝试找到一种使用用户输入来设置属性的方法,方法如下:
mode = input("Enter preferred mode (BCM/BOARD): ").upper()
mode_chosen = "GPIO." + mode
setattr(GPIO, "setmode", mode_chosen)
显然,上面的代码将属性设置为GPIO.BCM
或GPIO.BOARD
作为字符串,这当然是行不通的。我可以编写一个 if-else 循环来调用 GPIO.setmode(GPIO.whatever)
,具体取决于用户输入,但我想知道是否有更优雅的方法。
我对 python 比较陌生,所以我可能在这里遗漏了一些重要信息,所以...提前感谢任何花时间回答的人。
您可以使用getattr
从GPIO模块获取属性,然后在setattr
中使用:
mode = input("Enter preferred mode (BCM/BOARD): ").upper()
mode_chosen = getattr(GPIO, mode)
setattr(GPIO, "setmode", mode_chosen)
一种方法是使用字典:
choices = { "BCM": GPIO.BCM, "BOARD": GPIO.BOARD }
mode_chosen = choices[mode]