gpt4 book ai didi

python - 如果存在,则使用对象的全局版本

转载 作者:太空宇宙 更新时间:2023-11-04 08:26:22 25 4
gpt4 key购买 nike

我有一个函数,如果它存在于全局范围内则返回一个 API 客户端对象,如果不存在则创建一个新对象:

api_client = some_api.Client()

def _get_client():
if "client" in globals():
client = globals()["api_client"]
else:
client = some_api.Client()

return client

def foo():
client = _get_client()
client.do_stuff()

这正如我所期望的那样工作,但我不确定这是否是正确的和/或 Pythonic 的方式来做到这一点。我的用例是,在大多数云提供商中,函数即服务产品(例如 AWS Lambda、Google Cloud Functions)在全局范围内声明的对象可以在您的函数调用中重复使用。这减少了每个请求需要建立的网络连接数。

虽然我只能在使用它的函数中引用全局对象,但它更难测试,这就是为什么我喜欢在 _get_client() 后面抽象它。这样模块就完全独立了如果需要

话虽如此,我并不完全相信这是个好主意,或者我是否应该返回直接使用全局对象。

最佳答案

当局部范围内不存在某些名称时,函数将自动查看模块级范围,即全局范围。因此,与其检查 globals 字典,不如请求原谅:

def _get_client():
try:
return api_client
except NameError:
return some_api.Client()

关于python - 如果存在,则使用对象的全局版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56779993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com