首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python:除了命名空间冲突之外,包导入*是否有缺点

除了命名空间冲突之外,包导入*还有以下缺点:

  1. 可读性降低:使用*导入会导致代码中出现大量未明确指定来源的变量和函数,使得代码难以阅读和理解。阅读代码时,无法准确知道这些变量和函数是从哪个模块导入的。
  2. 命名冲突风险:使用*导入可能会导致命名冲突,特别是当导入的模块中存在相同名称的变量或函数时。这会导致代码中的变量被意外覆盖,导致错误的结果。
  3. 不利于代码维护和调试:当使用*导入时,如果导入的模块发生了变化,例如添加了新的函数或变量,那么在代码中使用的地方也需要相应地修改。这增加了代码维护的复杂性,并且可能导致调试困难。
  4. 不利于代码静态分析和优化:使用*导入会使静态代码分析工具难以确定代码中使用的变量和函数的来源,从而影响代码的优化和分析。
  5. 不符合编码规范和最佳实践:通常,编码规范和最佳实践建议明确导入所需的模块和成员,而不是使用*导入。这样可以提高代码的可读性和可维护性。

总结起来,尽管使用导入可以简化代码编写,但它会带来可读性、命名冲突、维护性、调试性和静态分析等方面的问题。因此,在实际开发中,建议避免使用导入,而是明确导入所需的模块和成员。这样可以提高代码的可读性、可维护性和可靠性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python中`__init__.py`文件的作用是什么?

是一种将相关模块(Python 文件)组织到一个易于使用的命名空间中的方式。允许你将相关功能组合在一起,从而更容易组织和重用你的代码。...当你从导入模块时,Python 首先在模块中查找符号,然后在的 __init__.py 文件中查找。这允许你选择性地从导入符号,而不会弄乱命名空间。...首先,它们允许你将代码组织成称为的逻辑单元。这使得管理和重用代码变得更容易,并且还有助于避免命名冲突。 其次,__init__.py 文件是控制导入行为所必需的。...这允许我们选择性地从导入符号,而不会弄乱命名空间。...__init__.py 文件可用于执行设置操作:除了定义级变量和函数之外,你还可以使用 __init__.py 文件来执行设置操作,例如,您可能希望初始化数据库连接或加载配置数据。

15710

Python】:老鸟的入门笔记(5)

TL;DR * 模块和 一、模块 模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再利用,同时提供自包含的命名空间从而避免程序出现变量名冲突。...注意:下划线不是“私有”声明:仍然可以通过其他形式的导入来获取并修改这类名称。 1.3. 模块命名空间 模块就是命名空间,存在于一个模块内的名称被称为模块对象的属性。...模块命名空间可以通过属性 __dict__ 或 dir() 获取。 模块是一个独立的作用域。...二、模块 模块导入除了模块名之外导入还可以指定目录路径。 Python 代码的目录被称为,因此这样的导入就称为导入。...导入是把计算机上的目录变成另一个 Python 命名空间,其属性则对应于目录中所包含的子目录和模块文件。 参考: 《Python学习手册 原书第五版 上册》 ----

19920
  • Python模块

    一、模块概述 命名空间 由于在Python中一切皆为对象(Object), 想要好好理解Module和Package,一定要先理解Namespace的概念。...对于Python而言,常见的Namespace主要有以下几种 Build-in Namespace (内建命名空间) Global Namespace (全局命名空间) Local Namespace...(局部命名空间) 有了命名空间的概念,可以有效的解决函数或者是变量重名的问题。...优点 提高了代码的可维护性 提高了代码的复用度,编写代码不必从零开始,当一个模块编写完成,就可以在其他地方引用 引用其他模块,包含python内置模块和第三方模块 避免函数名和变量名等命名冲突...解决 为了避免模块名的冲突python又引入了按目录来组织模块的方法,称为(package) 特点 引入以后,只要顶层名不与别人冲突, 那么所有的模块都不会与别人冲突 注意 每个目录下都会有一个名为

    1K40

    Python模块

    通过将代码组织成模块,我们可以更好地组织代码、提高可重用性,并支持更好的命名空间管理。使用模块还可以避免函数名和变量名冲突。...此外,Python为了避免模块名冲突,引入了按目录来组织模块的方法,称为(Package)。...而first_demo存在模块冲突了,于是我们通过first(Package)来组织,避免冲突。...模块创建了一个独立的命名空间,可以使用模块名来访问其中的变量和函数,从而避免命名冲突。...如: """ 这里只导入了math模块中的sqrt函数 如果要导入多个函数,使用英文逗号,隔开即可 如果需要引入全部模块,import后面跟上*号即可,这种方式不是推荐的做法,因为它可能导致命名冲突和代码不易读

    10710

    Python 学习入门(35)—— 模块

    模块简介 python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题。...module_1的内容才算定义了url变量,不过要注意的是导入的模块的变量并不是定义在顶层命名空间,而是在模块的命名空间中,因此使用如下方式导入后的打印变量如下: >>> import module_1...模块和搜索路径  一个python文件就是一个模块,使用独立的命名空间,但实际使用过程中单单用模块来定义python功能显然还不够。...因为一个大型的系统几千上万个模块是很正常的事情,如果都聚集在一起显然不好管理并且有命名冲突的可能,因此python中也出现了一个的概念。...(package),通过使用“点模块名称”创建Python模块命名空间的一种方法。例如,模块名称 A.B 表示一个在名为 A的包下的名为B的子模块。

    73220

    Python中的模块和

    每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空 间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突 import...(比如my_module),会先检查该模块是否已经被加载到内存中(当前 执行文件的名称空间对应的内存),如果有则直接引用 ​ ps:python解释器在启动时会自动加载一些模块到内存中,可以使用...import导入文件时,产生名称空间中的名字来源于文件,import ,产生的名称空间的名字同样 来源于文件,即包下的 __init__.py ,导入本质就是在导入该文件 A和B下有同名模块也不会冲突...,如A.a与B.a来自两个命名空间 的使用 示例文件 glance/ #Top-level package ├── __init__.py...优点: 导入更加简单 缺点: 只能在导入中的模块时才能使用 注意: 相对导入只能用于内部模块之间的相互导入,导入者与被导入者都必须存在于一个内 试图在顶级之外使用相对导入是错误的,言外之意,必须在顶级内使用相对导入

    77320

    一文弄懂Python代码规范

    __等,应该放在模块docstring之后,但在除了__future__导入之外的任何导入语句之前。...Python要求未来的导入必须出现在模块中除了文档字符串之外的任何其他代码之前: """This is the example module....在多句注释中,除了最后一句之外,句子结束后应使用一个或两个空格。 确保您的注释对使用您所编写的语言的其他人来说是清晰且容易理解的。...即使使用__all__属性,内部接口(、模块、类、函数、属性等)仍应以单个前导下划线作为前缀。 _internal_function = ... 包含命名空间的内部性。...如果包含命名空间、模块或类)被视为内部的,则其包含的接口也被视为内部的。 导入的名称应被视为实现细节。

    34410

    Python 中5种下划线的含义都是什么?

    ,应该避免通配符导入,因为它们使名称空间中存在哪些名称不清楚。...与通配符导入不同,常规导入不受前导单个下划线命名约定的影响: 3 小结 如果遵循PEP8推荐,避免通配符导入,只需要记住: 单个下划线是一个Python命名约定,表示这个名称是供内部使用的。...2 示例 为避免冲突,你可以附加一个下划线来解决命名冲突: 3 小结 总之,单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。PEP8解释了这个约定。...双下划线前缀会导致Python解释器重写属性名称,以避免子类中的命名冲突。这也叫做名称修饰(name mangling) - 解释器更改变量的名称,以便在类被扩展的时候不容易产生冲突。...在这种情况下,“_”作为占位符变量可以派上用场: 你可以在一个解释器会话中访问先前计算的结果,或者是在动态构建多个对象并与它们交互,无需事先给这些对象分配名字: 3 说明 除了用作临时变量之外,“

    1.3K40

    Python 里最具代表性的符号,竟如此强大

    目前常见的用法有五种: _用于临时变量 var_用于解决命名冲突问题 _var用于保护变量 __var用于私有变量 __var__用于魔术方法 下面我们具体看看这些下划线应用场景。...nums = 13 for _ in range(nums): fun_oper() 1.3 元组拆中的_ 第三个用法是元组拆,赋值的时候可以用_来表示略过的内容。...二、var_用于解决命名冲突问题 变量后面加一个下划线。主要用于解决命名冲突问题,元编程中遇时 Python 保留的关键字时,需要临时创建一个变量的副本时,都可以使用这种机制。...使用from XXX import *是一种通配导入(wildcard import),这是 Python 社区不推荐的方式,因为你根本搞不清你到底导入了什么属性、方法,很可能搞乱你自己的命名空间。...可以看到 _常用于临时变量,在 REPL,for 循环,元组拆和国际化中得到了广泛应用。var_用于解决命名冲突问题,使用时比较简单易懂的。

    75320

    Python面试常见问题集锦:基础语法篇

    **is用于判断两个对象是否为同一个对象(同一内存地址), ==**比较对象的值是否相等。误用is可能导致预期之外的结果。...注意避免使用import *,以免污染命名空间。 5. 问题集锦:函数篇 问题1:如何定义一个Python函数? **答案:**在Python中,使用def关键字定义一个函数。...从模块中导入所有成员:from module_name import *(不推荐,可能导致命名冲突)。...可以包含子和模块,形成层次化的模块组织结构。通过,可以更好地管理大型项目中的模块,避免命名冲突,并提供更清晰的模块导入路径。...当使用import语句导入模块时,Python会按照sys.path中的目录顺序依次查找对应的.py文件或。如果找到匹配的模块文件或,就进行导入;否则抛出ModuleNotFoundError。

    17010

    Python面试常见问题集锦:基础语法篇

    is用于判断两个对象是否为同一个对象(同一内存地址), ==比较对象的值是否相等。误用is可能导致预期之外的结果。...注意避免使用import *,以免污染命名空间。5. 问题集锦:函数篇问题1:如何定义一个Python函数?答案:在Python中,使用def关键字定义一个函数。...从模块中导入所有成员:from module_name import *(不推荐,可能导致命名冲突)。...可以包含子和模块,形成层次化的模块组织结构。通过,可以更好地管理大型项目中的模块,避免命名冲突,并提供更清晰的模块导入路径。问题4:解释Python的模块搜索路径(sys.path)及其作用。...答案: sys.path是一个列表,包含了Python解释器在导入模块时会查找的目录列表。当使用import语句导入模块时,Python会按照sys.path中的目录顺序依次查找对应的.py文件或

    12810

    Python模块化编程:面试题深度解析

    一、Python模块化编程基础Python模块化编程主要包括以下几个核心概念:模块:一个包含Python定义和语句的文件,通常以.py为扩展名。模块可以导入其他模块,也可以被其他模块导入。...:一种文件夹结构,用于组织相关的模块。内通常包含一个__init__.py文件,使该文件夹被视为一个导入机制:使用import语句引入所需模块,支持绝对导入、相对导入、星号导入等多种方式。...命名空间:每个模块拥有独立的命名空间,避免变量名冲突。通过from ... import ...或as别名来管理导入对象的访问。...不适当的星号导入问题示例:pythonfrom math import *sqrt(16) # 使用math模块的sqrt函数易错点:过度使用星号导入,污染当前命名空间,增加命名冲突风险,降低代码可读性...应对策略:避免在模块级别使用星号导入。明确导入所需对象,保持命名空间整洁。如需简化导入,可考虑使用别名或在函数内部使用局部星号导入。3.

    8210

    Python学习笔记:命名空间和作用域

    图4 变量定义的名称与内置名称冲突,有效地删除了使用print函数的功能。但是,还没有删除print函数,它只是在作用域内到达的第一个名称。...这可以通过指定在启动Python解释器时自动导入指定的内置模块__builtin__来完成。 ? 图5 模块作用域 内置命名空间作用域之下是模块作用域。...模块作用域包括在Python的执行模块或终端中在任何类或函数之外定义的所有名称。这是我们在将对象赋值给变量时通常会考虑的命名空间: ?...本地作用域和外围作用域 本地作用域是程序“当前”级别的命名空间,这是在函数、类或导入的模块而不是主模块中。例如: ?...重新定义作用域的语句 下面介绍如何手动将变量赋值给不同的命名空间,能够将已定义变量的作用域移到其本地命名空间之外可能很重要。例如,在上节的最后一个代码块中,我们无法访问在最小作用域内赋值为5的x变量。

    89440

    Python 依赖库管理哪家强?pip、pipreqs、pigar、pip-tools、pipdeptree 任君挑选

    在上篇文章《由浅入深:Python 中如何实现自动导入缺失的库?》...pigar 对于查询真实的导入源很有帮助,例如bs4 模块来自beautifulsoup4 库,MySQLdb 则来自于MySQL_Python 库。可以通过“-s”参数,查找真实的依赖库。...pip-sync 命令可以根据 requirements.txt 文件,来对虚拟环境中进行安装、升级或卸载依赖库(注意:除了 setuptools、pip 和 pip-tools 之外)。...除此之外,它还可以: 生成普遍适用的 requirements.txt 文件 逆向查找某个依赖库是怎么引入进来的 提示出相互冲突的依赖库 可以发现循环依赖,进行告警 生成多种格式的依赖树文件(json、...graph、pdf、png等等) 它也有缺点,比如无法穿透虚拟环境。

    2.1K10

    Python __init__.py 作用详解

    (包含多个模块) 内建模块(使用C编写并已链接到Python解释器中) 当导入模块时,解释器按照sys.path列表中的目录顺序来查找导入文件。...,解释器做以下工作: 已导入模块的名称创建新的命名空间,通过该命名空间就可以访问导入模块的属性和方法。...在新创建的命名空间中执行源代码文件。...导入 多个相关联的模块组成一个,以便于维护和使用,同时能有限的避免命名空间冲突。...将模块a的属性直接导入命名空间中,例如访问a中属性时直接用attr_a 使用from语句可以把模块直接导入当前命名空间,from语句并不引用导入对象的命名空间,而是将被导入对象直接引入当前命名空间

    21.5K10

    Python之异常模块

    目录 1、异常 1.1 捕获异常 1.2 错误类型捕获 1.3 捕获未知错误 1.4 没有异常发生才执行的代码 1.5 无论是否有异常,都要执行的代码 1.6 抛出异常 2、模块 2.1 模块的导入方式...在开发中,除了代码执⾏出错时被动抛出异常之外, 还可以根据应⽤程序特有的业务需求主动抛出异常。...程序架构的⼀个核⼼概念 ,每⼀个以扩展名 py 结尾的 Python 源代码⽂件都是⼀个模块; 模块名同样也是⼀个标识符,需要符合标识符的命名规则; 在模块中定义的全局变量 、函数、类 都是提供给外界直接使...pass # 根据 name 判断是否执⾏下⽅代码 if __name__ == "main": main() 3、 是⼀个包含多个模块的特殊⽬录,一个目录下需要有__init__.py...文件 ,使用的目的是一次性可以把一个目录下所有的模块通过一条import语句导入

    57020

    从函数到Python代码层次

    类中的函数叫做方法,除了方法还有属性(也就是变量),我写个不严谨的公式:类 = 属性 + 方法,例如: class People: #定义属性 name = '' age = 0...模块与模块之间是不能直接调用的,必须使用import关键字来导入。...命名空间 命名冲突是个头疼的问题,Python提供了命名空间这个方法,把代码块划分为不同的命名空间,同一个命名空间不能重名,不同命名空间可以重名,如图所示: ? 命名空间一般有三种: ?...内置:Python内置的名字。 全局:模块中定义的名字,包括模块的函数、类、其他导入的模块、模块级的变量和常量。 局部:函数中定义的名字,包括函数的参数和局部定义的变量。...作用域 命名空间决定了变量的作用域,小的作用域只在内部才有作用,比如函数内的变量,模块是不能用的: def func(): a = 1 print(a) # 报错NameError: name

    62820

    【愚公系列】2021年12月 Python教学课程 17-模块与

    从某个对象内导入某个指定的部分到当前命名空间中,不会将整个对象导入。...这时需要直接调用 func 3. from xx.xx import xx as rename 为了避免命名冲突,在导入的时候,可以给导入的对象重命名。...func() f() 4. from xx.xx import * 将对象内的所有内容全部导入。非常容易发生命名冲突,请慎用!...通过的层层嵌套,我们能够划分出一个又一个的命名空间名通常为全部小写,避免使用下划线。 四、 的使用 只有包含__init__.py 文件的目录才会被认作是一个!...Python 会进入文件系统,找到这个里面所有的子模块,一个一个的把它们都导入进来。 但是这个方法有风险,有可能导入的模块和已有的模块冲突,或者并不需要导入所有的模块。

    37820

    【C++】C++基本知识点盘点(1)

    主要的内容如下啦~ 目录 一.缺省函数 二.命名空间域 三.访问限定符(C++实现封装的方式) 四. C++中的NULL与空指针区别 五.函数重载 六....:在实际运用代码的过程中,可能存在局部变量之间命名冲突/库与局部变量命名之间相互冲突的情况,因而我们可以在局部域全局域之外设置一个区域:命名空间域。...要使用时通过 a)展开命名空间域 / b)指定访问命名空间域 来实现。...(例:缺省函数) 图示:(注意函数声明时,是否存在缺省函数)StackInit 图中StackPush为函数重载 六....但别急,它也还有缺点呢~ 2.内敛函数的缺陷/特点 内联函数的本质是通过牺牲空间换时间,运用内联函数程序的运行速度大大提升;但于此同时程序的大小也会急剧增大。

    15310

    python基础教程:,对,没错,绝对不是双肩

    ,Package,是一种Python模块的集合,从文件组织形式上看,就是一个文件夹,里面放着各种模块(.py文件),也可以有子文件夹(子)。名构建了一个Python模块的命名空间。...比如,模块名A.B表示A中名为B的子模块。这种使用加点的模块名可以让你写的软件里面的模块名称和其它软件里面的模块名称一样,但又不相互冲突。 举个栗子,我们要设计一个处理图片的模块集合(一个)。...__all__ = ['colors', 'crop', 'rotate'] 定义了__all__之后,from image.process import *就会把colors,crop,rotate导入到当前命名空间...实际写代码的实践中,import *的做法是严格被禁止的,它容易造成中模块名与当前命名空间的名称冲突。...导入PythonPython子模块 导入的方法和导入模块的方法一样: import image 在程序中引用colors子模块时: image.process.colors(...)

    49920
    领券