Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何编写函数来运行函数并返回唯一命名的外部作用域变量?_Python_Function - Fatal编程技术网

Python 如何编写函数来运行函数并返回唯一命名的外部作用域变量?

Python 如何编写函数来运行函数并返回唯一命名的外部作用域变量?,python,function,Python,Function,我需要多次运行一个函数,每次5个参数中有3个保持不变。如何编写一个函数,将唯一的参数作为输入,并将内部函数的输出作为唯一变量返回 我尝试运行的函数是SQLalchemy的一部分: sales=Table('sales',元数据,自动加载=True,自动加载=engine,schema=None) 第一个参数table name总是不同的,并且应该是变量的名称。最后一个论点有时会有所不同 我的想法是用table_name:schema_name创建一个字典,并将其传递给一个函数,该函数在字典中循

我需要多次运行一个函数,每次5个参数中有3个保持不变。如何编写一个函数,将唯一的参数作为输入,并将内部函数的输出作为唯一变量返回

我尝试运行的函数是SQLalchemy的一部分:

sales=Table('sales',元数据,自动加载=True,自动加载=engine,schema=None)
第一个参数table name总是不同的,并且应该是变量的名称。最后一个论点有时会有所不同

我的想法是用table_name:schema_name创建一个字典,并将其传递给一个函数,该函数在字典中循环并运行table函数

table_name={'sales':无,'orders':无,'customers':'cust_data'}
def表示表格(表格:dict):
对于表,表中的架构:
非本地exec(表)
exec(表格)=表格(表格,元数据,自动加载=True,
自动加载(使用=引擎,模式=模式)
表示表(表名称)

我想这里有两个问题。首先,如何使用另一个变量中包含的字符串命名新变量?其次,如何从函数返回变量,以便以后可以调用它?

您通常不希望动态创建变量。改用字典之类的数据结构

如何编写一个函数,将唯一的参数作为输入,并将内部函数的输出作为唯一变量返回

您可以创建一个函数,从当前作用域中提取所需的对象,只返回一个
实例:

engine = create_engine(...)
metadata = MetaData()

def create_table(name, schema=None):
    return Table(name, metadata, autoload=True, autoload_with=engine, schema=schema)
然后,您可以创建一个表字典:

tables = {
    'sales': create_table('sales'),
    'orders': create_table('orders'),
    'customers': create_table('customers', schema='cust_data'),
}
如果希望以可读性为代价减少重复,可以使用字典理解从描述表的对象创建表:

table_schemas = {
    'sales': None,
    'orders': None,
    'customers': 'cust_data',
}

tables = {
    name: create_table(name, schema)
    for name, schema in table_schemas.items()
}

SQLAlchemy还有一个可能很有用的方法。

与其尝试按名称修改全局变量,不如将它们存储在dict中。这样不仅可以包含它们并保护它们不受名称冲突的影响,而且更易于实现。
非局部exec(表)