Python替代全局变量

时间:2019-06-11 10:09:08

标签: python function variables global

在此示例中,test_function1有4个变量需要在test_funtion2中使用。我不希望使用全局变量,因为我正在编写的实际代码更加复杂并且会破坏它。

def test_function1():
    a = input("Type aaa:")
    b = "bbb"
    c = "ccc"
    d = "ddd"


test_funtion1()


def test_function2():
    if a == "aaa"
        print(b)
        print(c)
        print(d)


test_function2()

我有一个解决方案,但是我不确定它是否好,能否请您告诉我这是否可行,或者是否还有其他选择,谢谢! 对不起,我的语法不是英语。

def test_function1():
    a = input("Type aaa:")
    b = "bbb"
    c = "ccc"
    d = "ddd"
    return (a, b, c, d)


def test_function2():
    if (test_funtion1()[0]) == "aaa"
        print(test_funtion1()[1])
        print(test_funtion1()[2])
        print(test_funtion1()[3])

4 个答案:

答案 0 :(得分:2)

我认为您正在寻找的是classes

a, b,c, d是您的状态,此类的实例化形成一个状态,该状态基本上是这4个引用的值。您的第一个函数是“构造函数”(称为__init__),并且第二个功能便可以访问这些"instance variables"

答案 1 :(得分:1)

将参数传递给函数并从函数返回值确实是避免全局状态的第一种也是最明显的方法-但是在您的代码段中,您应该避免四次调用test_function1,这可以通过保持导致局部变量:

def test_function2():
    result = test_funtion1() 
    if result[0] == "aaa"
        print(result[1])
        print(result[2])
        print(result[3])

,或者在这种特定情况下(当函数返回tuple或已知长度的ny序列时),您可以使用tuple unpacking

def test_function2():
    a, b, c, d = test_funtion1() 
    if a == "aaa"
        print(b)
        print(c)
        print(d)

此外,如果您有一组处理同一组(相关)变量的函数,则可能需要看看classes and objects

答案 2 :(得分:0)

  

我编辑了最适合我的解决方案:

def test_function1():
    a = input("Type aaa:")
    b = "bbb"
    c = "ccc"
    d = "ddd"
    return a, b, c, d


def test_function2():
    x = test_function1()
    if x[0] == "aaa":
        print(x[1])
        print(x[2])
        print(x[3])


test_funtion2()

答案 3 :(得分:0)

您也可以使用

def test_function1():
    a = input("Type aaa:")
    b = "bbb"
    c = "ccc"
    d = "ddd"

    t =  a, b, c, d
    return t


def test_function2():
    x = test_function1()
    if x[0] == "aaa":
        print(x[1])
        print(x[2])
        print(x[3])


test_function2()