python - 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() 之间有什么区别?
先感谢您!
解决方案
推荐阅读
- environment-variables - 使用 @quasar/quasar-app-extension-dotenv 时从服务器(不是 .env 文件)读取环境变量
- amazon-web-services - 调用 Codepipeline 并传递参数的 Lambda 函数。可能的?
- javascript - 我如何让我的侧边菜单推动我的网站?
- r - 如果单元格满足基于另一个矩阵的条件,则在 kable 中添加星号
- c# - 如何在 Xamarin.Forms (Android) 中读取 Microsoft App Center 环境变量?
- recursion - 在 Dr. Racket 中,如何编写 Tetration 函数
- laravel - laravel 5.7 with() 方法
- javascript - 如何获得相同的随机结果
- database - 有没有办法显示业务类型的前 10 名平均评分?
- swift - UICollectionViewCell 中按钮的可用性?