Python:通配符子集导入

Python: wildcard subset import(Python:通配符子集导入)
本文介绍了Python:通配符子集导入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们都被告知使用from module import *不是一个好主意。但是,是否可以使用通配符导入module内容的子集

例如:

mode.py:

MODULE_VAR1 = "hello"
MODULE_VAR2 = "world"
MODULE_VAR3 = "The"
MODULE_VAR4 = "quick"
MODULE_VAR5 = "brown"
...
MODULE_VAR10 = "lazy"
MODULE_VAR11 = "dog!"
MODULE_VAR12 = "Now"
MODULE_VAR13 = "is"
...
MODULE_VAR98 = "Thats"
MODULE_VAR99 = "all"
MODULE_VAR100 = "folks!"

def abs():
    print "Absolutely useful function: %s" % MODULE_VAR1

显然我们不想使用from module import *,因为我们将覆盖abs函数。但假设我们确实希望所有MODULE_VAR*变量都可以在本地访问。

简单地输入from module import MODULE_VAR*不起作用。有什么办法可以做到这一点吗?

我使用了100个变量作为说明,因为执行from module import MODULE_VAR1, MODULE_VAR2, MODULE_VAR3, ..., MODULE_VAR100显然非常笨拙,如果添加更多的变量(例如MODULE_VAR101)也不会起作用。

推荐答案

您可以使用帮助器函数- 而且它不需要魔法就可以完成:

import re

def matching_import(pattern, module, globals):
    for key, value in module.__dict__.items():
        if re.findall(pattern, key):
            globals[key] = value

现在,您可以执行以下操作:

from utils import matching_import
import constants

matching_import("MODULE_VAR.*", constants, globals())

以这种方式显式使用globals()可避免帧自省魔术,这通常被认为是有害的。

这篇关于Python:通配符子集导入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)