4

对于 pandasql 包的 sqldf 方法,有一个“会话/环境变量”,可以是 locals() 或 globals(),谁能告诉我它是做什么用的?任何文档参考什么时候应该使用 locals(),什么时候应该使用 globals()?

https://github.com/yhat/pandasql/

这是我的代码,想知道 pandansql 正在寻找彻底的 locals() 什么东西?locals() 表示方法 select_first_50 内的命名空间?

def select_first_50(filename):
    students = pandas.read_csv(filename)
    students.rename(columns = lambda x: x.replace(' ', '_').lower(), inplace=True)

    q = "select major, gender from studentstable limit 50"

    #Execute your SQL command against the pandas frame
    results = pandasql.sqldf(q.lower(), locals())
    return results
4

1 回答 1

8

locals()并且globals()是用于返回相应命名空间的python内置函数。

在 Python 中,命名空间是实现作用域的一种方式。所以全局命名空间意味着全局范围,所以在那里定义的变量(名称)在整个模块中都是可见的。

local namepsace 是特定函数的本地名称空间。

globals()返回一个表示当前全局命名空间的字典。

locals()的返回取决于它被调用的位置,当直接在脚本范围内(而不是在特定函数内)调用时,它返回与globals()全局命名空间相同的字典。在函数内部调用时,它返回本地命名空间。

在 pandasql 中,您需要传递的第二个参数基本上是这个命名空间(字典),其中包含您在查询中使用的变量。假设您创建了一个名为 的 DataFrame a,然后在其上编写查询。然后 pandasql 需要知道与名称对应的 DataFrame,a它需要本地/全局命名空间,这就是第二个参数的用途。

所以你需要决定传入什么,例如,如果你的DataFrame只定义在一个函数内部并且不存在于全局范围内,你需要传入locals()返回字典,如果你的DataFrame存在于全局范围内,你需要传入的结果globals()

于 2015-08-16T07:01:56.617 回答