我对以下代码有疑问。如您所见,我在函数 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)")
我怎样才能改变它,使光标也可以从函数外部使用?
请您参考如下方法:
从字面上回答您的问题:在函数顶部添加 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:让函数返回它的结果,而不是将它存储到一个全局变量中,然后将该结果分配给你想要的任何变量您调用该函数。
这种风格通常允许更好的测试、更好的维护、更少的麻烦、更大的灵 active (如果明天你想要 两个 游标在 cursor1 和 cursor2,仅举个例子?全局变量需要维护,使用返回结果的更好方法是微不足道的...)。
