使用控制台选择和更改 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())
我正在学习 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())