简体   繁体   English

python函数字符串参数转换为变量名

[英]python function string parameter convert to variable name

I'm rather new to Python and programming in general, so I apologise in advance if my terminology is incorrect. 我一般对Python和编程都不熟悉,所以如果我的术语不正确,我会提前道歉。

hue_alert_delay = 0

def delays(name, delay):
    global hue_alert_delay

    if name == 'hue_alert_delay':
        for i in range(0, delay):
            hue_alert_delay += 1
            time.sleep(1)

        hue_alert_delay = 0

delays('hue_alert_delay', 60)

What I'm trying to achieve: 我想要达到的目标:

I would like the function to convert the 'name' parameter, which is a string input, into a pre-exiting variable, which will negate the need for multiple IF statements. 我希望该函数将作为字符串输入的'name'参数转换为预先存在的变量,这将不需要多个IF语句。

The above example includes only one IF statement, but for my project there will be a lot more and I would rather keep the function clean and simple. 上面的示例仅包含一个IF语句,但是对于我的项目,将会有更多的内容,我宁愿保持该函数的简洁和简单。

This won't work, but it's what I'm trying to aim for: 这是行不通的,但这是我要针对的目标:

hue_alert_delay = 0

def delays(name, delay):
    global name

    for i in range(0, delay):
        name += 1
        time.sleep(1)

    hue_alert_delay = 0

delays('hue_alert_delay', 60)

Any assistance would be appreciated. 任何援助将不胜感激。

Use a dict: 使用字典:

values = {
    'hue_alert_delay': 0
}

def delays(name, delay):
    values[name] += 1

Whenever you feel like using "variable variables", what you most likely really want is a dict storing key-value associations. 每当您想使用“变量变量”时,您最可能真正想要的是一个存储键值关联的字典。 Yes, there are other ways to do literally what you want, but that soon leads to insane code. 是的, 还有其他的方式从字面上你想要什么,但很快导致疯狂的代码。

Use a dictionary like so. 像这样使用字典。

vars = {'hue_alert_delay':0}
def delays(name, delay):
  for i in range(0, delay):
      vars[name] += 1
      time.sleep(1)
  vars[name] = 0

You can also use globals()[name] but I won't recommend it. 您也可以使用globals()[name]但我不建议这样做。

Use a dictionary: 使用字典:

vars = {'hue_alert_delay':0}

def delays(name, delay):
    for i in range(delay):
        vars[name] += 1
        time.sleep(1)

    vars[name] = 0

delays('hue_alert_delay', 60)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM