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] 时将该结果分配给您想要的任何变量=]调用函数。
这种风格通常允许更好的测试、更好的维护、更少的麻烦、更大的灵活性(如果明天你想要两个游标在cursor1
和cursor2
,仅举个例子?全局变量需要维护,使用 return
ing 结果的更好方法是微不足道的...)。
你就不能return吗?
def setup_session():
db = sqlite3.connect("data.db")
return db.cursor()
我对以下代码有疑问。如您所见,我在函数 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] 时将该结果分配给您想要的任何变量=]调用函数。
这种风格通常允许更好的测试、更好的维护、更少的麻烦、更大的灵活性(如果明天你想要两个游标在cursor1
和cursor2
,仅举个例子?全局变量需要维护,使用 return
ing 结果的更好方法是微不足道的...)。
你就不能return吗?
def setup_session():
db = sqlite3.connect("data.db")
return db.cursor()