压缩多个变量

时间:2014-03-14 21:03:20

标签: python datatable command-line-arguments argparse

我有大量的变量和参数定义。有没有办法让它占用更少的线,或者我坚持使用它?

# Standard input module to absorb commands from CLI
parser = argparse.ArgumentParser(description='User inputs source and destination tables to transfer data.')
parser.add_argument('src_table', help='Source table not supplied.', type=str)
parser.add_argument('dest_table', help='Destination table not supplied.', nargs='?', type=str)  # optional arg
parser.add_argument('instance_object', help='New item not supplied.', nargs='?', type=str)
parser.add_argument('instance_id', help='Item ID not supplied.', nargs='?', type=int)
args = parser.parse_args()
src_table = args.src_table
dest_table = args.dest_table

1 个答案:

答案 0 :(得分:0)

抵制创造大量变数的冲动。请改为通过args访问这些值。

但是,可能args的所有属性转换为全局变量:

globals().update(**vars(args))

但这污染了全局命名空间。 更好的选择是将args传递给函数:

def main(src_table, dest_table, instance_object, instance_id):
    print(src_table, dest_table, instance_object, instance_id)

if __name__ == '__main__':
    import argparse
    parser = argparse.ArgumentParser(description='User inputs source and destination tables to transfer data.')
    parser.add_argument('src_table', help='Source table not supplied.', type=str)
    parser.add_argument('dest_table', help='Destination table not supplied.', nargs='?', type=str)  # optional arg
    parser.add_argument('instance_object', help='New item not supplied.', nargs='?', type=str)
    parser.add_argument('instance_id', help='Item ID not supplied.', nargs='?', type=int)
    args = parser.parse_args()
    main(**vars(args))

因此,在main内,所有arg属性都可以作为局部变量访问。以这种方式构建程序允许您的代码既可以用作脚本,也可以作为模块导入。这使得您的代码更加通用,因此比“污染”更好。具有大量变量的全局命名空间。