python - 有没有办法让函数内部的函数知道传递给父函数的变量

标签 python variables parameters

我有两个 python 函数,其中一个函数使用另一个函数。我必须将相同的变量传递给两者。有没有办法让第二个函数知道传递给第一个的变量,而不是显式地将变量传递两次?

现在,我将变量作为输入传递给第一个函数,然后将其传递给第二个函数。

我当前代码的结构是:

def DB_Connection(source):

    conn = pyodbc.connect(dsn=source)

    return conn


def DB_Query(source, sql_string):

    conn = DB_Connection(source)
    data = pd.read_sql(sql_string, conn)

    return data

这按预期工作;但是,我不知道这是否是最佳做法。相反,有没有一种方法可以执行以下操作,其中 DB_Connection() 知道 source 因为它已传递到 DB_Query():

def DB_Connection(source):

    conn = pyodbc.connect(dsn=source)

    return conn


def DB_Query(source, sql_string):

    conn = DB_Connection()
    data = pd.read_sql(sql_string, conn)

    return data

最佳答案

这是类的用例之一,用于在方法之间共享数据。

class DBConnection:
    def __init__(self, source):
        self.source = source

    def get_connection(self):
        return pyodbc.connect(dsn=self.source)

    def query(self, sql_string):
        return pd.read_sql(sql_string, self.get_connection())


db = DBConnection(...)
db.query("SELECT foo from bar")

这个类还可以更轻松地在查询之间共享单个连接,而不是让 query 每次都打开一个新连接。

class DBConnection:
    def __init__(self, source):
        self.source = pyodbc.connect(dsn=source)

    def get_connection(self):
        return self.source

    def query(self, sql_string):
        return pd.read_sql(sql_string, self.source)

关于python - 有没有办法让函数内部的函数知道传递给父函数的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55458615/

相关文章:

linux - 1号线不工作,这两条线不一样吗?为什么?

c# - 如何在堆栈跟踪转储中获取变量值?

Jenkins Pipeline 将密码参数传递给下游作业

python - 将 .xls 转换为 .xlsx 以便 Openpyxl 可以使用它

python - 模块未找到错误 : No module named 'app' fastapi docker

python - 从词干词中获取最接近的名词

python - 如何执行 shell 命令来填充 Jenkins 动态选择参数插件

具有格式化程序的 Python 日志记录模块导致 AttributeError

javascript - 需要帮助使用 jquery 搜索 XML 文件并将结果存储在变量中供以后使用

python - 避免 GridSearchCV 中的某些参数组合