返回全局变量的函数

2024-04-25 22:43:59 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以编写一个返回全局变量的函数(在函数内部创建变量,然后在函数外部全局返回)?我不能在函数调用之前分配变量,因为我在tkinter上使用它,因此它在While循环中


Tags: 方法函数tkinter全局函数调用while全局变量
3条回答

可以使用global将函数中的变量标记为全局变量。还可以返回变量的值

def f():
    global x

    x = 1

    return x

是的,你可以,这是我正在写的一个数据科学项目的例子

_train_ds = None
_val_ds = None


def get_ds(split: str):
    def _get_ds():
        return CellExpressionGraphOptimized(split)

    if split == 'train':
        global _train_ds
        if _train_ds is None:
            _train_ds = _get_ds()
        return _train_ds
    elif split == 'validation':
        global _val_ds
        if _val_ds is None:
            _val_ds = _get_ds()
        return _val_ds
    else:
        raise NotImplementedError()


def train_model():
    # ...
    train_ds = get_ds('train')
    val_ds = get_ds('val')
    # ...

讨论

我不同意全局变量是错误的,是一种糟糕的编码实践。这取决于您正在编写的代码。 在我的例子中,我正在训练一些机器学习模型,函数train_model()由一个库调用,该库在模型选择过程中自动多次调用该函数。变量_train_ds_val_ds是一些内存中的数据集,我不想不必要地创建这些数据集(我希望在函数train()的各种调用中重用它们),在这里,全局变量是一个非常透明、高效的解决方案

不,函数可以set全局变量,但不能返回任何可能影响全局状态的局部变量/值

一般来说,全局变量是不好的,这使得你很难对你的程序进行推理。尽可能使用仅具有本地状态的函数

相关问题 更多 >