是否可以创建上下文相关的函数?

Is it possible to make a context-dependent function?

我已经使用以下脚本直接 运行 脚本,只是为了 运行 在脚本之外创建一个 bash 命令行(例如作业调度程序)。

def qsubcommand(func):
    def wrapper(*args, **kwargs):
        if kwargs.get('test', False):
            cmdl = ' '.join(['this.py', func.__name__, *map(str, args)])
            return cmdl
        else:
            return func(*args, **kwargs)
    return wrapper

@qsubcommand
def calculate(value1, value2):
   # do something

if __name__ == '__main__':
    if len(sys.argv) > 1:
        func, args = sys.argv[1], sys.argv[2:]
        if func in locals().keys():
            locals()[func](*args)
        else:
            raise NotImplementedError

我有很多像'calculate'这样的功能。 我正在使用 运行ning 的脚本并测试程序。

# When I want to run directly:
>>> calculate(4, 5)

# When I want to just print command line:
>>> calculate(4, 5, test=True)
'this.py calculate 4 5'

但是,我想像下面这样以上下文相关的方式使用它。

# When I want to run directly:
>>> test = False
>>> calculate(4, 5)

# When I want to just print command line:
>>> test = True
>>> calculate(4, 5)
'this.py calculate 4 5'

我如何修改才能让函数识别作用域外的变量。 是否可以访问函数外的变量?

提前感谢您的热心回答。

只需将其放在要检查变量的函数部分即可:

if 'test' in globals() and test:
    # do test
else:
    # do normal

函数总是可以访问函数作用域之外的变量,只是如果你不使用 global 关键字,它们就不能编辑它们。