【问题标题】:setting user input to variable name [duplicate]将用户输入设置为变量名[重复]
【发布时间】:2015-07-01 16:23:17
【问题描述】:

我正在使用 python,想知道是否可以向用户询问变量的名称,然后使用该名称创建一个变量。例如:

my_name = input("Enter a variable name") #for example the user could input orange
#code to set the value of my_name as a variable, say set it to the integer 5
print(orange) #should print 5 if the user entered orange

我知道这可以使用字典来完成,但我想知道这是否可以在不创建额外对象的情况下实现。我正在使用 python 3。谢谢。

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以使用调用globals()返回的字典:

    input_name = raw_input("Enter variable name:") # User enters "orange"
    globals()[input_name] = 4
    print(orange)
    

    如果不想将其定义为全局变量,可以使用locals():

    input_name = raw_input("Enter variable name:") # User enters "orange"
    locals()[input_name] = 4
    print(orange)
    

    【讨论】:

    • 谢谢,它有效。但是我总是必须用 globals() 来做吗?
    • 我不知道有比通过globals() 或locals() 更简单的方法来实现您的要求。
    • locals 不能保证工作。
    • 如果赋值和使用在同一个词法范围内,那么是的。
    • 如何在不事先知道用户输入的情况下在后面的代码中访问这个变量?
    【解决方案2】:

    如果你的代码在函数之外,你可以通过修改locals来实现。

    my_name = raw_input("Enter a variable name")  # Plain input() in Python 3
    localVars = local()
    localVars[my_name] = 5
    

    如果您在函数内部,则无法完成。 Python 在函数中执行各种优化,这些优化依赖于它预先知道变量的名称 - 您不能在函数中动态创建变量。

    更多信息在这里:https://stackoverflow.com/a/8028772/901641

    【讨论】:

    • 这个答案在函数之外有效。您说不可能在函数内执行此操作,但@EvenLisle 的答案也适用于函数内。你能解释一下为什么会这样吗?
    • @AbdulHadiKhan:在他的情况下,您正在修改全局变量。与局部变量相比,Python 访问全局变量的时间要长得多。
    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2013-08-02
    • 1970-01-01
    相关资源
    最近更新 更多