关于 pandasql locals() 和 globals() 方法问题

about pandasql locals() and globals() method issue

对于pandasql包的sqldf方法,有一个"session/environment variables",可能是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

locals()globals()是python内置函数,用于return对应的命名空间。

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

本地命名空间是特定函数的本地命名空间。

globals() return是表示当前全局命名空间的字典。

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

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

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