如何从一个函数中获取一个变量并在另一个函数中使用它而不必将该变量设为全局?
答案 0 :(得分:4)
你基本上有两种选择。
一种是将它作为参数传递给第二个函数。 (如果你想让第一个函数看到值的变化,它需要是一个引用类型(例如一个字典/列表),你必须不要覆盖该对象,只修改它(例如a.append(b)
而不是{ {1}})。
第二个是定义一个可以用作单例的类。从技术上讲,这仍然是“全局”的定义,但它可以让你保持分组:
a = a + [b]
(您也可以使用class FooSingleton(object):
class_var = "foo"
def func1():
FooSingleton.class_var = "bar"
def func2():
print(FooSingleton.class_var)
代替课程;优先考虑问题。)
答案 1 :(得分:2)
让函数接受一个参数,并将该参数传递给。
def one_function():
one_variable = ''
return one_variable
def another_function(a_param):
# do something to a_param
return
答案 2 :(得分:0)
技术上可行且可以使用,例如用于记忆(但后来它通常隐藏在装饰者后面,只有那些确信他们做正确的事情的人才能实现,即使他们可能仍然觉得有点不好):
def g():
if not hasattr(g, "x"):
g.x = 0
return g.x
g()
# 0
g.x = 100
g()
# 100
答案 3 :(得分:0)
您可以使用闭包来处理这个问题,或者更自然的是将两个函数定义为类的方法,将“全局”变量定义为类的成员。