我有这样的代码
def function3():
print(text)
def function2():
text = "Hello"
function3()
def function1():
text = "World"
function3()
就像你看到的那样,我想自动从函数2和函数1中传递变量到函数3。这个变量应该只在这三个函数中可见(所以我不能把它设置为全局变量)。我也不想每次都在圆括号之间传递这个变量,因为我将会使用function3上千次。在php中有没有类似关键字使用的东西?
function3() use (text):
print(text)
我不是100%确定我现在想做什么(不懂php),但它只是像这样的东西?
def function3(text):
print(text)
def function2():
text = "Hello"
function3(text)
def function1():
text = "World"
function3(text)
没有什么直接的等价物,你通常只是把参数传来传去。
根据我的理解 use
关键字来手动添加变量到匿名函数的闭包中。在 python 中,函数作用域已经使用词法作用域规则为你自动创建了闭包。你可以做这样的事情。
def function_maker():
text = None # need to initialize a variable in the outer function scope
def function3():
print(text)
def function2():
nonlocal text
text = "Hello"
function3()
def function1():
nonlocal text
text = "World"
function3()
return function1, function2, function3
function1, function2, function3 = function_maker()
但这种模式在Python中并不常见,你只需要使用一个类。
class MyClass:
def __init__(self, text): # maybe add a constructor
self.text = text
def function3(self):
print(self.text)
def function2(self):
self.text = "Hello"
self.function3()
def function1(self):
self.text = "World"
self.function3()