python - Python 最佳模块导入实践
问题描述
我有一个 python 模块 mymodule.py:
def auth():
'''Authorize and generate a JSON file'''
return j
j = auth()
def get_value(key):
'''Takes the key and return value from JSON'''
value = j[key]
return value
我有一个程序,我在其中使用这个模块 myprogram.py:
import mymodule
keys = [1,2,3,4,5]
def simple_program(keys):
# mymodule.auth() should I place it here?
for key in keys:
value = mymodule.get_value(key)
return value
所以目标是调用 mymodule.auth() 一次,每次我运行 simple_program 来刷新 JSON 文件。我不知道如何实现这一点。因为 myprogram.py 也是一个模块,我从另一个 .py 文件调用 simple_program() 。那么我在哪里放置 mymodule.auth()?可以将 mymodule.auth() 放在 simple_program 中吗?
解决方案
在您导入 mymodule 的那一刻,下面的代码就会运行
j = auth()
这就是为什么当您调用mymodule.get_value()
它时起作用的原因。这导致 J 成为全局空间中的单例。每次导入这个,auth()
都会再次运行。这可能很糟糕。
你可以做的是:
def auth():
'''Authorize and generate a JSON file'''
return j
j = None
def get_value(key):
global j
'''Takes the key and return value from JSON'''
if not j:
j = auth()
value = j[key]
return value
现在你只需要运行get_value()
,一切都应该正常。无需auth()
再次执行。
推荐阅读
- c - 如何反转链表的顺序?
- electron - 将文件添加到打包的电子应用程序的正确方法是什么?
- ms-access - 访问查询正在询问计算字段的参数,我该如何停止呢?
- authentication - OAuth 客户端凭据流 - 将客户端详细信息作为声明调用
- python - Gensim LDA 多核 Python 脚本运行速度太慢
- node.js - 从包中导入子文件夹
- asp.net-mvc - 将字符串传递给 DocumentHelper.GetDocuments().Where() 时出现异常
- xcode - Xcode Generate Code Coverage Report failed with Error : Error Domain=IDEFoundationErrorDomain Code=14 "Failed to merge raw profile in directory
- swift - Swift NSCollectionView 从下到上流程
- bash - 如何仅grep一行中的第一个字符串