gpt4 book ai didi

python - 避免在 python util 文件中使用全局变量

转载 作者:太空狗 更新时间:2023-10-30 02:18:03 25 4
gpt4 key购买 nike

我的 python 项目有一个 utilities.py 文件。它仅包含实用函数,例如 is_float(string)is_empty(file) 等。

现在我想要一个函数 is_valid(number),它必须:

  1. 从文件 valid.txt 中读取,其中包含所有有效的数字,并将它们加载到 map /集合上。
  2. 检查 map 是否存在 number 并返回 True 或 False。

这个函数经常被调用,运行时间应该越小越好。我不想每次调用该函数时都打开并阅读 valid.txt。我想出的唯一解决方案是使用全局变量 valid_dict,它在 时从 valid.txt 加载一次utilities.py 已导入。加载代码在utilities.py中写成main。

我的问题是如何在不使用全局变量的情况下执行此操作,因为这被认为是不好的做法?在不使用全局变量的情况下执行此类任务的良好设计模式是什么?还要再次注意,这是一个 util 文件,因此理想情况下应该没有 main 本身,只有函数。

最佳答案

以下是一个闭包的简单示例。字典 cache 封装在外部函数 (load_func) 中,但仍保留在内部函数的范围内,即使返回时也是如此。请注意,load_func 将内部函数作为对象返回,而不是调用它。

utilities.py 中:

def _load_func(filename):

cache = {}

with open(filename) as fn:
for line in fn:
key, value = line.split()
cache[int(key)] = value

def inner(number):
return number in cache

return inner

is_valid = _load_func('valid.txt')

__main__ 中:

from utilities import is_valid                  # or something similar

if is_valid(42):
print(42, 'is valid')
else:
print(42, 'is not valid')

字典(缓存)的创建可以使用字典理解来完成,但我希望你专注于闭包。

关于python - 避免在 python util 文件中使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822675/

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