首页 > 解决方案 > Python 中 vars() 和 globals() 的区别

问题描述

创建一个用于生成数据帧的类,我生成了一个 str 格式的变量名称列表(例如,变量 x 在列表中表示为“x”)。为了将生成的字符串列表的元素用作变量,我在不同的函数中同时使用了 vars() 和 globals() ,因为 vars() 在函数中不起作用。

In: my_num = 100

In: vars()['my_num']
Out: 100

In: globals()['my_num']
Out: 100

结果,我注意到在函数中使用 vars() 无法将这些函数的输出用于其他函数的问题。这是使用 vars() 的示例,它不能作为 str 的输出提供列表,而不会在全局环境中生成相应的变量:

def pair_lines(all_lines, titles):
    matrix = pd.DataFrame(columns=titles, index=titles)
    out = []
    for n1, i1, numb1 in zip(titles, all_lines, range(0, len(titles))):
        for n2, i2, numb2 in zip(titles, all_lines, range(0, len(titles))):
            if n1 == n2:
                continue
            if '{}_{}'.format(n2,n1) in out:
                continue
            else:
                x = '{}_{}'.format(n1,n2)
                vars()[x] = pd.merge(i1, i2, on='Gene_ID', how = 'inner')
                out.append(x)
                matrix.iloc[numb1, numb2] = float(len(vars()[x]))
    return out

将 vars() 更改为 globals() 解决了这个问题。

为什么会这样,vars() 和 globals() 之间有什么区别?

先感谢您!

标签: pythonfunction

解决方案


推荐阅读