如何从其他作用域访问变量而不传递参数或放置全局变量?

时间:2019-01-25 16:12:06

标签: python

我在lambda模块中有一个函数lambda_handler,包括其他模块并调用helloWorld函数。

在helloWorld函数中传递参数或将变量设置为全局变量不是一种选择。是否可以从较早的范围访问变量?

#--- lambda.py ---   
import my_module 

def lambda_handler(event,context):
    my_module.helloWorld()   

#--- my_module.py ---
def helloWorld():
    local_variable = <something>.context    

2 个答案:

答案 0 :(得分:2)

使用inspect模块获取调用框架的局部变量:

import inspect


def lambda_handler(event, context):
    helloWorld()

def helloWorld():
    calling_frame = inspect.currentframe().f_back
    print(calling_frame.f_locals['event'])
    print(calling_frame.f_locals['context'])


lambda_handler('an event', 'a context')

输出

an event
a context

答案 1 :(得分:-2)

您可以尝试:

from mymodule import *

因为应该从 mymodule 导入变量。

但是它可能不会导入在导入之后创建的变量,因为它读取 def 语句中的代码作为调用时的操作,实际上并不会创建变量。