python自动传递变量给函数

问题描述 投票:-1回答:2

我有这样的代码

def function3():
    print(text)

def function2():
    text = "Hello"
    function3()

def function1():
    text = "World"
    function3()

就像你看到的那样,我想自动从函数2和函数1中传递变量到函数3。这个变量应该只在这三个函数中可见(所以我不能把它设置为全局变量)。我也不想每次都在圆括号之间传递这个变量,因为我将会使用function3上千次。在php中有没有类似关键字使用的东西?

function3() use (text):
    print(text)
python function variables scope
2个回答
1
投票

我不是100%确定我现在想做什么(不懂php),但它只是像这样的东西?

def function3(text):
    print(text)

def function2():
    text = "Hello"
    function3(text)

def function1():
    text = "World"
    function3(text)

1
投票

没有什么直接的等价物,你通常只是把参数传来传去。

根据我的理解 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()
© www.soinside.com 2019 - 2024. All rights reserved.