我有一些类似于以下的Python代码:
def a():
x.b()
def c():
x = create_x()
a()
此处,x
是一个对象,因此在c()
中,我想创建x
,然后运行函数a()
。我希望x
是全局的,而不是必须将其作为参数传递给a()
。但是,如果我尝试运行上面的代码,它会告诉我x
中的a()
没有引用任何内容。
那么标准解决方案是什么?一个想法是全局定义x
并将其设置为0:
x = 0
def a():
global x
x.b()
def c():
global x
x = create_x()
a()
但这似乎有点奇怪,因为它暗示x
是一个整数,而实际上它是一个对象。
在C ++中,我通常会通过创建指向x
的指针,将其设置为0,然后将指针设置为由新对象x
创建的内存来解决此问题。但是什么是Python中最好的解决方案?
答案 0 :(得分:0)
这对我有用。在启动函数中使变量成为全局变量。
此代码的问题是必须在a之前调用b。
{{1}}
答案 1 :(得分:0)
我不知道是否回答了这个问题,但看起来您只需要在global x
函数内拨打c()
。
class XClass:
def b(self):
print 'hello world'
def create_x():
return XClass()
def a():
x.b()
def c():
global x
x = create_x()
a()
c() # hello world
a() # hello world
如果您在x
方法中创建create_x()
变量,可能会减少混淆:
class XClass:
def b(self):
print 'hello world'
def create_x():
global x
x = XClass()
def a():
x.b()
def c():
create_x()
a()
c() # hello world
a() # hello world
x.b() # hello world