Python:如何创建 "global object"?

Python: How can I create a "global object"?

我对以下代码有疑问。如您所见,我在函数 setup_session() 中设置了一个 sqlite3 数据库,但当我尝试 运行 它会抛出异常,因为我在 setup_session() 中创建的对象 cursor ] 仅在函数内部可用。

import sqlite3

def setup_session():
    db = sqlite3.connect("data.db")
    cursor = db.cursor()


setup_session()

cursor.execute("CREATE TABLE subjects (subject text)")

我如何更改它以便光标也可以从函数外部使用?

从字面上回答您的问题:在函数顶部添加 global cursor

def setup_session():
    global cursor
    db = sqlite3.connect("data.db")
    cursor = db.cursor()

但是 global 不是 好的编程习惯,您几乎总是可以使用更好的风格。在这里我会推荐:

def setup_session():
    db = sqlite3.connect("data.db")
    return db.cursor()

cursor = setup_session()

也就是说,避免 global:将函数 return 作为其结果,而不是将其存储到全局变量中,然后在 [=27] 时将该结果分配给您想要的任何变量=]调用函数。

这种风格通常允许更好的测试、更好的维护、更少的麻烦、更大的灵活性(如果明天你想要两个游标在cursor1cursor2 ,仅举个例子?全局变量需要维护,使用 returning 结果的更好方法是微不足道的...)。

你就不能return吗?

def setup_session():
    db = sqlite3.connect("data.db")
    return db.cursor()