Python:如何创建一个"全局对象"?

时间:2015-01-30 19:33:19

标签: python sqlite oop

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

import sqlite3

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


setup_session()

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

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

2 个答案:

答案 0 :(得分:8)

按字面意思回答您的问题:在功能顶部添加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作为结果,而不是将其存放到全局变量中,并将结果分配给调用<时所需的任何变量/ strong>功能。

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

答案 1 :(得分:2)

难道你不能退货吗?

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