在 python 中获取和设置值
get and set value in python
我想在我的 python 代码中使用一些全局变量。
然后用set函数设置它们的值,想通过get函数得到它们的值。
例如:
a = None #global variable1
b= None #global variable2
def set(var, value):
var = value
def get(var):
return var
set(a, '1')
get(b, '2')
我想要一个通用的 get 和 set 函数,它可以对任何全局变量执行此操作。我怎样才能在 python 中做到这一点?这里写的代码报错。
Python 是 "call by value" 而不是 "call by reference"。这意味着当您调用 "set(a, '1')" 时,您正在将 "a" 的值传递给函数 "set"。 "set"中的变量"var"是函数本身的局部变量,不会影响你的全局变量"a"。您需要让 setter 和 getter 方法访问您的全局变量。您可以通过使它们全部成为 class 对象的一部分来做到这一点。
如果您愿意将变量名称作为字符串传递,可以使用 globals()
函数来实现。但即使你可以,我也不认为这是个好主意。
首先,您可以这样做:
def get_var(var_name):
return globals()[var_name]
def set_var(var_name, value):
globals()[var_name] = value
我没有使用 set
这个名字,因为它是一个内置类型,您可能不想用其他东西来掩盖它。
你可以这样称呼它:
set_var("foo", 1)
bar = get_var("foo")
print(foo, bar) # prints 1 1
所以它可以工作,但实际上不需要那些功能。您可以改用普通语法分配或获取全局变量。只需使用 foo = 1
而不是 set_var("foo", 1)
(如果您在函数中执行此操作,请将 global foo
放在首位)。获取全局变量就像命名它一样简单(就像我在 print(foo)
中所做的那样)。
如果您事先不知道变量名,您可能应该将名称和值放入字典中,而不是将它们设为全局变量。变量名供程序员使用。它们不是数据!
我想在我的 python 代码中使用一些全局变量。 然后用set函数设置它们的值,想通过get函数得到它们的值。
例如:
a = None #global variable1
b= None #global variable2
def set(var, value):
var = value
def get(var):
return var
set(a, '1')
get(b, '2')
我想要一个通用的 get 和 set 函数,它可以对任何全局变量执行此操作。我怎样才能在 python 中做到这一点?这里写的代码报错。
Python 是 "call by value" 而不是 "call by reference"。这意味着当您调用 "set(a, '1')" 时,您正在将 "a" 的值传递给函数 "set"。 "set"中的变量"var"是函数本身的局部变量,不会影响你的全局变量"a"。您需要让 setter 和 getter 方法访问您的全局变量。您可以通过使它们全部成为 class 对象的一部分来做到这一点。
如果您愿意将变量名称作为字符串传递,可以使用 globals()
函数来实现。但即使你可以,我也不认为这是个好主意。
首先,您可以这样做:
def get_var(var_name):
return globals()[var_name]
def set_var(var_name, value):
globals()[var_name] = value
我没有使用 set
这个名字,因为它是一个内置类型,您可能不想用其他东西来掩盖它。
你可以这样称呼它:
set_var("foo", 1)
bar = get_var("foo")
print(foo, bar) # prints 1 1
所以它可以工作,但实际上不需要那些功能。您可以改用普通语法分配或获取全局变量。只需使用 foo = 1
而不是 set_var("foo", 1)
(如果您在函数中执行此操作,请将 global foo
放在首位)。获取全局变量就像命名它一样简单(就像我在 print(foo)
中所做的那样)。
如果您事先不知道变量名,您可能应该将名称和值放入字典中,而不是将它们设为全局变量。变量名供程序员使用。它们不是数据!