使用控制台选择和更改 Python 中的全局变量

Using console to choose and change a global variable in Python

我正在学习 python 并尝试使用函数来选择和更改全局变量。

我想使用控制台选择要更改的变量,然后选择新值。

我在函数内部使用 global 访问变量,我使用 exec() 继续通过 input() 捕获的所需修改。但是有些东西不起作用。

有人能找出这里出了什么问题吗?

name = "John"
age = 45
gender = "male"

def identify_yourself():
    print("My name is " + name + ".")
    print("I'm " + str(age) + " years old.")
    print("I'm " + gender + ".")
    
def change_something():
    global name, age, gender
    something = input("Which variable do you want to change?\n> ")
    
    # I then input "name"
    
    new_value = input("Change to what?\n> ")
    
    # I Then input "Paul"
    
    exec(something + " = '" + new_value + "'")
    identify_yourself()

identify_yourself()

# This first prints... 
# 
# My name is John.
# I'm 45 years old.
# I'm male.

change_something()

# On the second time this SHOULD print... 
# 
# My name is Paul.
# I'm 45 years old.
# I'm male.
# 
# ... but it's not working.
# It keeps printing "My name is John" even after I run the change_something() function

exec() 使用 globals()locals() 作为其全局和局部变量的默认值。它默认更改 locals(),而不是全局变量。因此,您必须明确告诉它覆盖全局变量。您可以通过以下方式执行此操作:

exec(something + " = '" + new_value + "'", globals())