为 aws s3 lambda 创建对象的最 Pythonic 方法是什么

问题描述 投票:0回答:1

我有这个 lambda 处理程序

def lambda_handler(event, context):
    args = json.loads(event['data'][0]['body'])
    batch = args['batch']

    execute_ecg_batch(batch)

execute_ecg_batch
批处理函数存在于同一文件中,并且具有大量专注于业务逻辑的功能。完成后,需要写入 Google Sheets。谷歌表格取决于
args
lambda_handler
对象的一些参数。

如果我的

GoogleSheet
基本上是一个单独的类,其对象是这样创建的

gsheet_writer = GoogleSheetWriter(args.param1, arg.param2, args.param3)

我应该如何以Pythonic方式“构建”我的代码?

一个想法是我可以在

gsheet_writer
中放大一个
lambda_handler
对象并传递它。然后它需要到处经过。

如果我全局创建它,那么它在创建时将无法访问

args
,并且我的代码必须确保它在创建之前设置这些值。

想法?

python python-3.x python-3.8
1个回答
0
投票

这是一种为 Lambda 处理程序和 Google Sheets 编写构建代码的 Pythonic 方法:

  1. gsheet_writer
    传递给
    execute_ecg_batch
    函数:
    您可以使用
    gsheet_writer
    中所需的参数在
    lambda_handler
    内创建它,而不是全局或在
    lambda_handler
    内创建
    args
    。然后,将此
    gsheet_writer
    对象作为参数传递给
    execute_ecg_batch
    。这样,
    execute_ecg_batch
    就可以访问 Google Sheets writer 对象,而不需要全局变量。

  2. args
    中处理
    execute_ecg_batch
    如果
    execute_ecg_batch
    需要访问
    args
    参数来写入 Google Sheets,您可以将这些特定参数与
    execute_ecg_batch
    一起直接传递给
    gsheet_writer

以下是如何修改代码的示例:

def lambda_handler(event, context):
    args = json.loads(event['data'][0]['body'])
    batch = args['batch']
    
    # Create Google Sheets writer object within lambda_handler
    gsheet_writer = GoogleSheetWriter(args['param1'], args['param2'], args['param3'])

    execute_ecg_batch(batch, gsheet_writer)

def execute_ecg_batch(batch, gsheet_writer):
    # Perform batch processing logic
    # Use gsheet_writer for writing to Google Sheets
    # Example:
    # gsheet_writer.write_data(data)
    pass

在此结构中:

  • lambda_handler
    使用
    gsheet_writer
    中的参数创建
    args
    ,并将其与
    batch
    一起传递到
    execute_ecg_batch
  • 然后,
  • execute_ecg_batch
    可以根据需要使用
    gsheet_writer
    将数据写入 Google 表格。

此方法使您的代码保持井井有条,并确保仅在需要时使用来自

args
的必要参数创建 Google Sheets writer 对象。

© www.soinside.com 2019 - 2024. All rights reserved.